OP WIN EVERY GAME NO RAGDOLL AUTO FARM MOBILE READY SOURCE
Key Required

OP WIN EVERY GAME NO RAGDOLL AUTO FARM MOBILE READY SOURCE

[UPD] Blind Shotleetleet 667 views 89 executesUpdated Dec 18, 2025
5.0/ 5(1 votes)
10100% Positive
Lua Script•2029 lines (65241 chars)
if getgenv().BlindShotOP then
    pcall(function() getgenv().BlindShotOP.Unload() end)
    task.wait(0.3)
end

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")

local LocalPlayer = Players.LocalPlayer
local Camera = Workspace.CurrentCamera

local Config = {
    espEnabled = true,
    espShowName = true,
    espShowDistance = true,
    espTracers = false,
    espBoxes = true,
    espLaserESP = true,
    
    aimbotEnabled = false,
    aimbotSmooth = 0.2,
    
    winModeEnabled = false,
    winModeSafeRadius = 5,
    
    punchAuraEnabled = false,
    punchAuraRange = 15,
    punchAuraSpeed = 0.1,
    
    autoFarmEnabled = false,
    autoFarmDelay = 1.5,
    
    antiRagdollEnabled = true,
    speedHackEnabled = false,
    speedHackValue = 25,
}

local Tuning = {
    BoxRatio = 0.55,
    MaxESPDistance = 2000,
    LaserESPLength = 500,
    SafeCheckRadius = 3,
    FlyHeight = 100,
    TrophyPosition = Vector3.new(78.7, 66.1, 116.3)
}

local Palette = {
    Enemy = Color3.fromRGB(220, 60, 60),
    Tracer = Color3.fromRGB(255, 80, 100),
    LaserActive = Color3.fromRGB(255, 0, 0),
    LaserInactive = Color3.fromRGB(100, 100, 100),
    Safe = Color3.fromRGB(0, 255, 0)
}

local IsMobileDevice = UserInputService.TouchEnabled

local State = {
    Running = true,
    Unloaded = false,
    LastPunch = 0,
    Farming = false,
    PunchEquipped = false,
    SafeSpotLocked = nil,
    FinalLocked = false,
    LastSafeCheck = 0,
    MobileAiming = false,
    WasFinalBattle = false,
    LastWinModeUpdate = 0,
    LastESPUpdate = 0,
    CachedArena = nil,
    CachedArenaTime = 0,
    CachedLasers = nil,
    CachedLasersTime = 0
}

local Cache = {
    Connections = {},
    LaserData = {}
}

local UpdateIntervals = {
    WinMode = IsMobileDevice and 0.05 or 0.016,
    ESP = IsMobileDevice and 0.1 or 0.033,
    ArenaCache = 0.5,
    LaserCache = IsMobileDevice and 0.033 or 0.016
}

local ScreenGui = nil

local ESP = { cache = {} }

if not Drawing then
    warn("Executor does not support Drawing library")
    return
end

local testDraw = Drawing.new("Square")
if type(testDraw) == "number" then
    warn("Drawing library returns IDs instead of objects")
    return
end
if testDraw and testDraw.Remove then
    testDraw:Remove()
end

function ESP.Create()
    return {
        BoxTop = Drawing.new("Line"),
        BoxRight = Drawing.new("Line"),
        BoxBottom = Drawing.new("Line"),
        BoxLeft = Drawing.new("Line"),
        Name = Drawing.new("Text"),
        Distance = Drawing.new("Text"),
        Tracer = Drawing.new("Line"),
        Laser = Drawing.new("Line")
    }
end

function ESP.Setup(obj)
    obj.BoxTop.Thickness = 1
    obj.BoxTop.Visible = false
    obj.BoxRight.Thickness = 1
    obj.BoxRight.Visible = false
    obj.BoxBottom.Thickness = 1
    obj.BoxBottom.Visible = false
    obj.BoxLeft.Thickness = 1
    obj.BoxLeft.Visible = false
    
    obj.Name.Size = 14
    obj.Name.Font = Drawing.Fonts.Monospace
    obj.Name.Center = true
    obj.Name.Outline = true
    obj.Name.Visible = false
    
    obj.Distance.Size = 12
    obj.Distance.Font = Drawing.Fonts.Monospace
    obj.Distance.Center = true
    obj.Distance.Outline = true
    obj.Distance.Visible = false
    
    obj.Tracer.Thickness = 1
    obj.Tracer.Visible = false
    
    obj.Laser.Thickness = 2
    obj.Laser.Visible = false
end

function ESP.Get(player)
    if not ESP.cache[player] then
        ESP.cache[player] = ESP.Create()
        ESP.Setup(ESP.cache[player])
    end
    return ESP.cache[player]
end

function ESP.Hide(obj)
    if not obj then return end
    obj.BoxTop.Visible = false
    obj.BoxRight.Visible = false
    obj.BoxBottom.Visible = false
    obj.BoxLeft.Visible = false
    obj.Name.Visible = false
    obj.Distance.Visible = false
    obj.Tracer.Visible = false
    obj.Laser.Visible = false
end

function ESP.Destroy(obj)
    if not obj then return end
    pcall(function() obj.BoxTop:Remove() end)
    pcall(function() obj.BoxRight:Remove() end)
    pcall(function() obj.BoxBottom:Remove() end)
    pcall(function() obj.BoxLeft:Remove() end)
    pcall(function() obj.Name:Remove() end)
    pcall(function() obj.Distance:Remove() end)
    pcall(function() obj.Tracer:Remove() end)
    pcall(function() obj.Laser:Remove() end)
end

function ESP.Remove(player)
    if ESP.cache[player] then
        ESP.Destroy(ESP.cache[player])
        ESP.cache[player] = nil
    end
end

function ESP.ClearAll()
    for player, obj in pairs(ESP.cache) do
        ESP.Destroy(obj)
    end
    ESP.cache = {}
end

local function GetCharacterRoot(character)
    if not character then return nil end
    return character:FindFirstChild("HumanoidRootPart")
end

local function GetCharacterHumanoid(character)
    if not character then return nil end
    return character:FindFirstChild("Humanoid")
end

local function IsPlayerAlive(player)
    if player == LocalPlayer then
        local char = LocalPlayer.Character
        if not char then return false end
        local hum = GetCharacterHumanoid(char)
        if not hum or hum.Health <= 0 then return false end
        return true
    end
    
    local aliveFolder = Workspace:FindFirstChild("jogadoresVivos")
    if aliveFolder then
        local playerValue = aliveFolder:FindFirstChild(player.Name)
        if playerValue then return true end
    end
    
    local char = player.Character
    if not char then return false end
    local hum = GetCharacterHumanoid(char)
    if not hum or hum.Health <= 0 then return false end
    
    return true
end

function ESP.Render(player)
    local obj = ESP.Get(player)
    
    if not Config.espEnabled then
        ESP.Hide(obj)
        return
    end
    
    if player == LocalPlayer then
        ESP.Hide(obj)
        return
    end
    
    if not IsPlayerAlive(player) then
        ESP.Hide(obj)
        return
    end
    
    local character = player.Character
    if not character then
        ESP.Hide(obj)
        return
    end
    
    local root = GetCharacterRoot(character)
    if not root then
        ESP.Hide(obj)
        return
    end
    
    local rootPos = root.Position
    local myChar = LocalPlayer.Character
    local myRoot = myChar and GetCharacterRoot(myChar)
    local distance = myRoot and (rootPos - myRoot.Position).Magnitude or 0
    
    if distance > Tuning.MaxESPDistance then
        ESP.Hide(obj)
        return
    end
    
    local screenPos, onScreen = Camera:WorldToViewportPoint(rootPos)
    if not onScreen or screenPos.Z <= 0 then
        ESP.Hide(obj)
        return
    end
    
    local screenSize = Camera.ViewportSize
    local boxHeight = math.clamp(2000 / screenPos.Z, 20, screenSize.Y * 0.8)
    local boxWidth = boxHeight * Tuning.BoxRatio
    local x = screenPos.X - boxWidth / 2
    local y = screenPos.Y - boxHeight / 2
    local color = Palette.Enemy
    
    if Config.espBoxes then
        obj.BoxTop.From = Vector2.new(x, y)
        obj.BoxTop.To = Vector2.new(x + boxWidth, y)
        obj.BoxTop.Color = color
        obj.BoxTop.Visible = true
        
        obj.BoxRight.From = Vector2.new(x + boxWidth, y)
        obj.BoxRight.To = Vector2.new(x + boxWidth, y + boxHeight)
        obj.BoxRight.Color = color
        obj.BoxRight.Visible = true
        
        obj.BoxBottom.From = Vector2.new(x + boxWidth, y + boxHeight)
        obj.BoxBottom.To = Vector2.new(x, y + boxHeight)
        obj.BoxBottom.Color = color
        obj.BoxBottom.Visible = true
        
        obj.BoxLeft.From = Vector2.new(x, y + boxHeight)
        obj.BoxLeft.To = Vector2.new(x, y)
        obj.BoxLeft.Color = color
        obj.BoxLeft.Visible = true
    else
        obj.BoxTop.Visible = false
        obj.BoxRight.Visible = false
        obj.BoxBottom.Visible = false
        obj.BoxLeft.Visible = false
    end
    
    if Config.espShowName then
        obj.Name.Text = player.DisplayName
        obj.Name.Position = Vector2.new(screenPos.X, y - 16)
        obj.Name.Color = color
        obj.Name.Visible = true
    else
        obj.Name.Visible = false
    end
    
    if Config.espShowDistance then
        obj.Distance.Text = string.format("[%dm]", math.floor(distance))
        obj.Distance.Position = Vector2.new(screenPos.X, y + boxHeight + 2)
        obj.Distance.Color = Color3.fromRGB(200, 200, 200)
        obj.Distance.Visible = true
    else
        obj.Distance.Visible = false
    end
    
    if Config.espTracers then
        local tracerStart = Vector2.new(screenSize.X / 2, screenSize.Y)
        obj.Tracer.From = tracerStart
        obj.Tracer.To = Vector2.new(screenPos.X, y + boxHeight)
        obj.Tracer.Color = Palette.Tracer
        obj.Tracer.Visible = true
    else
        obj.Tracer.Visible = false
    end
    
    if Config.espLaserESP then
        local skinModel = character:FindFirstChild("Skin_1")
        local laserVisible = false
        
        if skinModel then
            local ponto = skinModel:FindFirstChild("ponto")
            local targetPart = skinModel:FindFirstChild("TargetPart")
            
            if ponto and targetPart then
                local pontoAttach = ponto:FindFirstChild("Attachment")
                local targetAttach = targetPart:FindFirstChild("Attachment")
                local beam = ponto:FindFirstChild("Beam")
                
                if pontoAttach and targetAttach then
                    local laserStart = pontoAttach.WorldPosition
                    local laserEnd = targetAttach.WorldPosition
                    
                    local startScreen = Camera:WorldToViewportPoint(laserStart)
                    local endScreen = Camera:WorldToViewportPoint(laserEnd)
                    
                    if startScreen.Z > 0 then
                        obj.Laser.From = Vector2.new(startScreen.X, startScreen.Y)
                        obj.Laser.To = Vector2.new(endScreen.X, endScreen.Y)
                        
                        local isActive = beam and beam.Enabled
                        obj.Laser.Color = isActive and Palette.LaserActive or Palette.LaserInactive
                        obj.Laser.Thickness = isActive and 3 or 1
                        obj.Laser.Visible = true
                        laserVisible = true
                        
                        Cache.LaserData[player] = {
                            startPos = laserStart,
                            endPos = laserEnd,
                            direction = (laserEnd - laserStart).Unit,
                            active = isActive
                        }
                    end
                end
            end
        end
        
        if not laserVisible then
            obj.Laser.Visible = false
            Cache.LaserData[player] = nil
        end
    else
        obj.Laser.Visible = false
        Cache.LaserData[player] = nil
    end
end

local function GetTargetPart(character, partName)
    if not character then return nil end
    if partName == "Hitbox" then
        local hitbox = character:FindFirstChild("hitbox")
        if hitbox then return hitbox end
    end
    local part = character:FindFirstChild(partName)
    if part then return part end
    return GetCharacterRoot(character)
end

local Aimbot = {}

function Aimbot.GetClosestPlayer()
    local closestPlayer = nil
    local closestDist = math.huge
    local screenCenter = Camera.ViewportSize / 2
    
    for _, player in ipairs(Players:GetPlayers()) do
        if player == LocalPlayer then continue end
        if not IsPlayerAlive(player) then continue end
        
        local character = player.Character
        if not character then continue end
        
        local head = GetTargetPart(character, "Head")
        if not head then continue end
        
        local screenPos, onScreen = Camera:WorldToViewportPoint(head.Position)
        if not onScreen or screenPos.Z <= 0 then continue end
        
        local dist = (Vector2.new(screenPos.X, screenPos.Y) - Vector2.new(screenCenter.X, screenCenter.Y)).Magnitude
        if dist < closestDist then
            closestDist = dist
            closestPlayer = player
        end
    end
    
    return closestPlayer
end

function Aimbot.Update()
    if not Config.aimbotEnabled and not Config.winModeEnabled then return end
    
    local isMobileAiming = State.MobileAiming == true
    local isRMBPressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton2)
    
    if not Config.winModeEnabled and not isRMBPressed and not isMobileAiming then return end
    
    local target = Aimbot.GetClosestPlayer()
    if not target then return end
    
    local character = target.Character
    if not character then return end
    
    local head = GetTargetPart(character, "Head")
    if not head then return end
    
    local targetPos = head.Position
    local camPos = Camera.CFrame.Position
    local targetCF = CFrame.lookAt(camPos, targetPos)
    
    Camera.CFrame = Camera.CFrame:Lerp(targetCF, Config.aimbotSmooth)
end

local WinMode = {}
local PunchAura = {}
local VirtualInputManager = game:GetService("VirtualInputManager")

local function SimulateKeyPress(keyCode)
    pcall(function()
        VirtualInputManager:SendKeyEvent(true, keyCode, false, game)
        task.wait(0.05)
        VirtualInputManager:SendKeyEvent(false, keyCode, false, game)
    end)
    
    pcall(function()
        if keypress then
            keypress(keyCode.Value)
            task.wait(0.05)
            keyrelease(keyCode.Value)
        end
    end)
end

local function SimulateClick()
    pcall(function()
        VirtualInputManager:SendMouseButtonEvent(0, 0, 0, true, game, 1)
        task.wait(0.05)
        VirtualInputManager:SendMouseButtonEvent(0, 0, 0, false, game, 1)
    end)
    
    pcall(function()
        if mouse1click then
            mouse1click()
        end
    end)
end

function WinMode.EquipPunch()
    SimulateKeyPress(Enum.KeyCode.One)
    
    local backpack = LocalPlayer:FindFirstChild("Backpack")
    if backpack then
        for _, tool in pairs(backpack:GetChildren()) do
            if tool:IsA("Tool") then
                local char = LocalPlayer.Character
                if char then
                    pcall(function()
                        tool.Parent = char
                    end)
                end
                break
            end
        end
    end
end

function WinMode.ActivatePunch()
    local char = LocalPlayer.Character
    if not char then return end
    
    for _, item in pairs(char:GetChildren()) do
        if item:IsA("Tool") then
            pcall(function()
                item:Activate()
            end)
            break
        end
    end
    
    SimulateClick()
end

function WinMode.GetGameState()
    local state = {
        finalBattle = false,
        matchRunning = false,
        timerText = "",
        alivePlayers = 0
    }
    
    local finalBattle = Workspace:FindFirstChild("finalBattle")
    if finalBattle then state.finalBattle = finalBattle.Value end
    
    local partidaRolando = Workspace:FindFirstChild("partidaRolando")
    if partidaRolando then state.matchRunning = partidaRolando.Value end
    
    local jogadoresVivos = Workspace:FindFirstChild("jogadoresVivos")
    if jogadoresVivos then state.alivePlayers = #jogadoresVivos:GetChildren() end
    
    pcall(function()
        local playerGui = LocalPlayer:FindFirstChild("PlayerGui")
        if playerGui then
            local timerGui = playerGui:FindFirstChild("TimerGui")
            if timerGui then
                local timerLabel = timerGui:FindFirstChild("TimerLabel", true)
                if timerLabel then
                    state.timerText = timerLabel.Text
                end
            end
        end
    end)
    
    return state
end

local HITBOX_HALF_WIDTH = 2.5
local HITBOX_HALF_DEPTH = 1.5
local HITBOX_BUFFER = 0.5
local MIN_SAFE_DISTANCE = HITBOX_HALF_WIDTH + HITBOX_BUFFER

local function GetArenaInfo()
    local now = tick()
    if State.CachedArena and now - State.CachedArenaTime < UpdateIntervals.ArenaCache then
        return State.CachedArena
    end
    
    local arenaFloor = Workspace:FindFirstChild("chao")
    local result
    if arenaFloor then
        local pos = arenaFloor.Position
        local size = arenaFloor.Size
        local radius = math.min(size.X, size.Z) / 2 - 1.5
        result = {
            centerX = pos.X,
            centerZ = pos.Z,
            radius = math.max(radius, 1),
            floorY = pos.Y + size.Y / 2
        }
    else
        result = {
            centerX = 0,
            centerZ = -11,
            radius = 3,
            floorY = -5
        }
    end
    
    State.CachedArena = result
    State.CachedArenaTime = now
    return result
end

local function ClampToArena(pos)
    local arena = GetArenaInfo()
    local dx = pos.X - arena.centerX
    local dz = pos.Z - arena.centerZ
    local dist = math.sqrt(dx * dx + dz * dz)
    
    if dist > arena.radius then
        local scale = (arena.radius - 0.5) / dist
        return Vector3.new(
            arena.centerX + dx * scale,
            pos.Y,
            arena.centerZ + dz * scale
        )
    end
    
    return pos
end

local function IsInsideArena(pos)
    local arena = GetArenaInfo()
    local dx = pos.X - arena.centerX
    local dz = pos.Z - arena.centerZ
    local dist = math.sqrt(dx * dx + dz * dz)
    return dist <= arena.radius
end

local function PointToRayDistance(point, rayStart, rayDir)
    local toPoint = point - rayStart
    local projection = toPoint:Dot(rayDir)
    local closestPoint = rayStart + rayDir * math.max(0, projection)
    return (point - closestPoint).Magnitude
end

local function GetAllLaserData()
    local now = tick()
    if State.CachedLasers and now - State.CachedLasersTime < UpdateIntervals.LaserCache then
        return State.CachedLasers
    end
    
    local lasers = {}
    
    for _, player in ipairs(Players:GetPlayers()) do
        if player == LocalPlayer then continue end
        
        local character = player.Character
        if not character then continue end
        
        local skinModel = character:FindFirstChild("Skin_1")
        if not skinModel then continue end
        
        local ponto = skinModel:FindFirstChild("ponto")
        local targetPart = skinModel:FindFirstChild("TargetPart")
        
        if ponto and targetPart then
            local pontoAttach = ponto:FindFirstChild("Attachment")
            local targetAttach = targetPart:FindFirstChild("Attachment")
            
            if pontoAttach and targetAttach then
                local laserStart = pontoAttach.WorldPosition
                local laserEnd = targetAttach.WorldPosition
                local direction = (laserEnd - laserStart).Unit
                
                lasers[player] = {
                    startPos = laserStart,
                    endPos = laserEnd,
                    direction = direction
                }
            end
        end
    end
    
    State.CachedLasers = lasers
    State.CachedLasersTime = now
    return lasers
end

local function IsLaserHittingHitbox(hitboxCenter, laserStart, laserDir)
    local toHitbox = hitboxCenter - laserStart
    local projection = toHitbox:Dot(laserDir)
    
    if projection < 0 then return false, 999 end
    
    local closestPointOnRay = laserStart + laserDir * projection
    
    local dx = math.abs(closestPointOnRay.X - hitboxCenter.X)
    local dz = math.abs(closestPointOnRay.Z - hitboxCenter.Z)
    
    local isHit = dx < HITBOX_HALF_WIDTH and dz < HITBOX_HALF_DEPTH
    local clearance = math.min(HITBOX_HALF_WIDTH - dx, HITBOX_HALF_DEPTH - dz)
    
    return isHit, -clearance
end

function WinMode.IsPositionSafe(pos, radius)
    local lasers = GetAllLaserData()
    for player, laserData in pairs(lasers) do
        if laserData and laserData.direction then
            local isHit, clearance = IsLaserHittingHitbox(pos, laserData.startPos, laserData.direction)
            if isHit then
                return false
            end
            local dist = PointToRayDistance(pos, laserData.startPos, laserData.direction)
            if dist < MIN_SAFE_DISTANCE then
                return false
            end
        end
    end
    return true
end

function WinMode.GetMinLaserDistance(pos)
    local lasers = GetAllLaserData()
    local minDist = 999
    
    for player, laserData in pairs(lasers) do
        if laserData and laserData.direction and laserData.startPos then
            local isHit, clearance = IsLaserHittingHitbox(pos, laserData.startPos, laserData.direction)
            if isHit then
                return 0
            end
            local dist = PointToRayDistance(pos, laserData.startPos, laserData.direction)
            if dist < minDist then
                minDist = dist
            end
        end
    end
    
    return minDist
end

function WinMode.FindSafePosition()
    local arena = GetArenaInfo()
    local char = LocalPlayer.Character
    local arenaY = char and char:FindFirstChild("HumanoidRootPart") and char.HumanoidRootPart.Position.Y or -2
    local arenaCenter = Vector3.new(arena.centerX, arenaY, arena.centerZ)
    local arenaRadius = arena.radius
    
    local bestPos = arenaCenter
    local bestSafety = WinMode.GetMinLaserDistance(arenaCenter)
    
    for angle = 0, 360, 10 do
        for dist = 0, arenaRadius, 1 do
            local rad = math.rad(angle)
            local testPos = arenaCenter + Vector3.new(math.cos(rad) * dist, 0, math.sin(rad) * dist)
            
            local minLaserDist = WinMode.GetMinLaserDistance(testPos)
            
            if minLaserDist > bestSafety then
                bestSafety = minLaserDist
                bestPos = testPos
            end
        end
    end
    
    return bestPos
end

function WinMode.GetClosestEnemyPosition()
    local char = LocalPlayer.Character
    if not char then return nil end
    local root = GetCharacterRoot(char)
    if not root then return nil end
    
    local closestPos = nil
    local closestDist = math.huge
    
    for _, player in ipairs(Players:GetPlayers()) do
        if player == LocalPlayer then continue end
        if not IsPlayerAlive(player) then continue end
        
        local enemyChar = player.Character
        if not enemyChar then continue end
        local enemyRoot = GetCharacterRoot(enemyChar)
        if not enemyRoot then continue end
        
        local hitbox = enemyChar:FindFirstChild("hitbox")
        local head = enemyChar:FindFirstChild("Head")
        
        local targetPos
        if hitbox then
            targetPos = hitbox.Position
        elseif head then
            targetPos = head.Position
        else
            targetPos = enemyRoot.Position
        end
        
        local dist = (enemyRoot.Position - root.Position).Magnitude
        if dist < closestDist then
            closestDist = dist
            closestPos = targetPos
        end
    end
    
    return closestPos
end

function WinMode.GetClosestEnemy()
    local char = LocalPlayer.Character
    if not char then return nil end
    local root = GetCharacterRoot(char)
    if not root then return nil end
    
    local closestPlayer = nil
    local closestDist = math.huge
    
    for _, player in ipairs(Players:GetPlayers()) do
        if player == LocalPlayer then continue end
        if not IsPlayerAlive(player) then continue end
        
        local enemyChar = player.Character
        if not enemyChar then continue end
        local enemyRoot = GetCharacterRoot(enemyChar)
        if not enemyRoot then continue end
        
        local dist = (enemyRoot.Position - root.Position).Magnitude
        if dist < closestDist then
            closestDist = dist
            closestPlayer = player
        end
    end
    
    return closestPlayer
end

function WinMode.FindPositionBehindPlayer()
    local char = LocalPlayer.Character
    if not char then return nil end
    local root = GetCharacterRoot(char)
    if not root then return nil end
    
    local arena = GetArenaInfo()
    local arenaY = root.Position.Y
    
    local lasers = GetAllLaserData()
    local laserCount = 0
    for _ in pairs(lasers) do laserCount = laserCount + 1 end
    
    if laserCount == 0 then return nil end
    
    local bestPos = nil
    local bestSafety = 0
    local checked = 0
    local maxChecks = IsMobileDevice and 3 or 10
    
    for _, player in ipairs(Players:GetPlayers()) do
        if checked >= maxChecks then break end
        if player == LocalPlayer then continue end
        if not IsPlayerAlive(player) then continue end
        
        local enemyChar = player.Character
        if not enemyChar then continue end
        local enemyRoot = GetCharacterRoot(enemyChar)
        if not enemyRoot then continue end
        
        checked = checked + 1
        local enemyPos = enemyRoot.Position
        
        for laserPlayer, laserData in pairs(lasers) do
            if laserPlayer == player then continue end
            if not laserData or not laserData.direction then continue end
            
            local laserDir = Vector3.new(laserData.direction.X, 0, laserData.direction.Z).Unit
            
            local behindOffset = -laserDir * 1.5
            local behindPos = Vector3.new(
                enemyPos.X + behindOffset.X,
                arenaY,
                enemyPos.Z + behindOffset.Z
            )
            
            behindPos = ClampToArena(behindPos)
            
            if not IsInsideArena(behindPos) then continue end
            
            local isSafe = true
            local minClearance = 999
            
            for checkPlayer, checkLaser in pairs(lasers) do
                if not checkLaser or not checkLaser.direction then continue end
                
                local isHit = IsLaserHittingHitbox(behindPos, checkLaser.startPos, checkLaser.direction)
                if isHit then
                    isSafe = false
                    break
                end
                
                local dist = PointToRayDistance(behindPos, checkLaser.startPos, checkLaser.direction)
                if dist < minClearance then
                    minClearance = dist
                end
            end
            
            if isSafe and minClearance > 1 and minClearance > bestSafety then
                bestSafety = minClearance
                bestPos = behindPos
            end
        end
    end
    
    return bestPos
end

function WinMode.AimAtClosestEnemy()
    local char = LocalPlayer.Character
    if not char then return end
    local root = GetCharacterRoot(char)
    if not root then return end
    
    local closestEnemy = nil
    local closestDist = math.huge
    
    for _, player in ipairs(Players:GetPlayers()) do
        if player == LocalPlayer then continue end
        if not IsPlayerAlive(player) then continue end
        
        local enemyChar = player.Character
        if not enemyChar then continue end
        local enemyRoot = GetCharacterRoot(enemyChar)
        if not enemyRoot then continue end
        
        local dist = (enemyRoot.Position - root.Position).Magnitude
        if dist < closestDist then
            closestDist = dist
            closestEnemy = enemyRoot
        end
    end
    
    if closestEnemy then
        local lookAt = CFrame.new(root.Position, Vector3.new(closestEnemy.Position.X, root.Position.Y, closestEnemy.Position.Z))
        root.CFrame = lookAt
    end
end

function WinMode.FlyAndFling()
    local char = LocalPlayer.Character
    if not char then return end
    local root = GetCharacterRoot(char)
    if not root then return end
    local humanoid = GetCharacterHumanoid(char)
    
    root.CFrame = root.CFrame + Vector3.new(0, Tuning.FlyHeight, 0)
    
    if humanoid then
        humanoid.PlatformStand = true
    end
    
    local bv = root:FindFirstChild("WinModeBodyVelocity")
    if not bv then
        bv = Instance.new("BodyVelocity")
        bv.Name = "WinModeBodyVelocity"
        bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
        bv.Velocity = Vector3.new(0, 0, 0)
        bv.Parent = root
    end
    
    State.Flying = true
end

function WinMode.StopFlying()
    local char = LocalPlayer.Character
    if not char then return end
    local root = GetCharacterRoot(char)
    if not root then return end
    local humanoid = GetCharacterHumanoid(char)
    
    local bv = root:FindFirstChild("WinModeBodyVelocity")
    if bv then bv:Destroy() end
    
    if humanoid then
        humanoid.PlatformStand = false
    end
    
    State.Flying = false
end

function WinMode.FlingEnemy(enemy)
    local char = LocalPlayer.Character
    if not char then return end
    local root = GetCharacterRoot(char)
    if not root then return end
    local myHitbox = char:FindFirstChild("hitbox")
    
    local enemyChar = enemy.Character
    if not enemyChar then return end
    local enemyRoot = GetCharacterRoot(enemyChar)
    if not enemyRoot then return end
    local enemyHitbox = enemyChar:FindFirstChild("hitbox")
    
    local lookAt = CFrame.new(root.Position, Vector3.new(enemyRoot.Position.X, root.Position.Y, enemyRoot.Position.Z))
    root.CFrame = lookAt
    
    root.CFrame = CFrame.new(enemyRoot.Position + Vector3.new(0, 0.5, 0)) * CFrame.Angles(0, lookAt:ToEulerAnglesYXZ())
    
    WinMode.ActivatePunch()
    
    if myHitbox and enemyHitbox and firetouchinterest then
        for i = 1, 5 do
            pcall(function()
                firetouchinterest(myHitbox, enemyHitbox, 0)
                firetouchinterest(myHitbox, enemyHitbox, 1)
            end)
        end
    end
    
    for _, part in pairs(enemyChar:GetChildren()) do
        if part:IsA("BasePart") and myHitbox then
            pcall(function()
                firetouchinterest(myHitbox, part, 0)
                firetouchinterest(myHitbox, part, 1)
            end)
        end
    end
end

function WinMode.ResetPosition()
    local char = LocalPlayer.Character
    if not char then return end
    local root = GetCharacterRoot(char)
    if not root then return end
    
    local bv = root:FindFirstChild("WinModeAntifall")
    if bv then bv:Destroy() end
    
    local arena = GetArenaInfo()
    root.CFrame = CFrame.new(arena.centerX, root.Position.Y, arena.centerZ)
end

function WinMode.PreventFall()
    local char = LocalPlayer.Character
    if not char then return end
    local root = GetCharacterRoot(char)
    if not root then return end
    
    local bv = root:FindFirstChild("WinModeAntifall")
    if not bv then
        bv = Instance.new("BodyVelocity")
        bv.Name = "WinModeAntifall"
        bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
        bv.Velocity = Vector3.new(0, 0, 0)
        bv.Parent = root
    end
    
    local humanoid = GetCharacterHumanoid(char)
    if humanoid then
        humanoid.PlatformStand = false
    end
end

function WinMode.AllowFall()
    local char = LocalPlayer.Character
    if not char then return end
    local root = GetCharacterRoot(char)
    if not root then return end
    
    local bv = root:FindFirstChild("WinModeAntifall")
    if bv then bv:Destroy() end
end

function WinMode.Update()
    if not Config.winModeEnabled then
        State.PunchEquipped = false
        State.SafeSpotLocked = nil
        State.FinalLocked = false
        WinMode.AllowFall()
        return
    end
    
    local char = LocalPlayer.Character
    if not char then return end
    local root = GetCharacterRoot(char)
    if not root then return end
    
    local gameState = WinMode.GetGameState()
    
    if not gameState.matchRunning and not gameState.finalBattle then
        if State.WasFinalBattle then
            State.WasFinalBattle = false
            WinMode.AllowFall()
        end
        State.SafeSpotLocked = nil
        State.FinalLocked = false
        State.PunchEquipped = false
        return
    end
    
    if gameState.finalBattle then
        State.WasFinalBattle = true
    end
    
    local arena = GetArenaInfo()
    local arenaY = root.Position.Y
    local arenaCenter = Vector3.new(arena.centerX, arenaY, arena.centerZ)
    local arenaRadius = arena.radius
    
    local timerLower = gameState.timerText:lower()
    local isShootout = timerLower:find("shoot")
    
    local isCritical = gameState.timerText:find(": 0") or 
                       gameState.timerText:find(":0") or
                       gameState.timerText:find(": 1") or 
                       gameState.timerText:find(":1") or
                       gameState.timerText:find(": 2") or
                       gameState.timerText:find(":2") or
                       gameState.timerText:find(": 3") or
                       gameState.timerText:find(":3")
    
    if isShootout then
        State.FinalLocked = true
        return
    end
    
    State.FinalLocked = false
    
    local now = tick()
    if now - State.LastWinModeUpdate < UpdateIntervals.WinMode then
        if State.SafeSpotLocked then
            local safePos = ClampToArena(Vector3.new(State.SafeSpotLocked.X, arenaY, State.SafeSpotLocked.Z))
            local closestEnemy = WinMode.GetClosestEnemyPosition()
            if closestEnemy then
                root.CFrame = CFrame.new(safePos, closestEnemy)
            else
                root.CFrame = CFrame.new(safePos)
            end
        end
        return
    end
    State.LastWinModeUpdate = now
    
    local lasers = GetAllLaserData()
    
    local bestPos = nil
    local bestSafety = 0
    
    local stepAngle = IsMobileDevice and (isCritical and 8 or 20) or (isCritical and 3 or 10)
    local stepDist = IsMobileDevice and (isCritical and 0.8 or 2) or (isCritical and 0.3 or 1)
    
    for angle = 0, 359, stepAngle do
        for dist = 0, arenaRadius, stepDist do
            local rad = math.rad(angle)
            local spot = Vector3.new(
                arena.centerX + math.cos(rad) * dist,
                arenaY,
                arena.centerZ + math.sin(rad) * dist
            )
            
            local isSafe = true
            local minClearance = 999
            
            for player, laserData in pairs(lasers) do
                if laserData and laserData.direction then
                    local isHit = IsLaserHittingHitbox(spot, laserData.startPos, laserData.direction)
                    if isHit then
                        isSafe = false
                        minClearance = 0
                        break
                    end
                    local dist2 = PointToRayDistance(spot, laserData.startPos, laserData.direction)
                    if dist2 < minClearance then
                        minClearance = dist2
                    end
                end
            end
            
            if isSafe and minClearance > MIN_SAFE_DISTANCE and minClearance > bestSafety then
                bestSafety = minClearance
                bestPos = spot
            end
        end
    end
    
    if bestPos and bestSafety > MIN_SAFE_DISTANCE then
        State.SafeSpotLocked = ClampToArena(bestPos)
    else
        local behindPos = WinMode.FindPositionBehindPlayer()
        if behindPos and IsInsideArena(behindPos) then
            State.SafeSpotLocked = ClampToArena(behindPos)
        elseif bestPos then
            State.SafeSpotLocked = ClampToArena(bestPos)
        elseif not State.SafeSpotLocked then
            State.SafeSpotLocked = arenaCenter
        end
    end
    
    if not State.SafeSpotLocked then return end
    
    State.SafeSpotLocked = ClampToArena(State.SafeSpotLocked)
    local safePos = ClampToArena(Vector3.new(State.SafeSpotLocked.X, arenaY, State.SafeSpotLocked.Z))
    
    local closestEnemy = WinMode.GetClosestEnemyPosition()
    local targetCFrame
    if closestEnemy then
        targetCFrame = CFrame.new(safePos, closestEnemy)
    else
        targetCFrame = CFrame.new(safePos)
    end
    
    root.CFrame = targetCFrame
    
    if gameState.finalBattle then
        WinMode.PreventFall()
        
        if State.SafeSpotLocked then
            local clamped = ClampToArena(State.SafeSpotLocked)
            local safePos = Vector3.new(clamped.X, root.Position.Y, clamped.Z)
            
            local closestEnemy = WinMode.GetClosestEnemyPosition()
            if closestEnemy then
                root.CFrame = CFrame.new(safePos, closestEnemy)
            else
                root.CFrame = CFrame.new(safePos)
            end
        end
        
        if not State.PunchEquipped then
            WinMode.EquipPunch()
            State.PunchEquipped = true
        end
        
        for _, player in ipairs(Players:GetPlayers()) do
            if player == LocalPlayer then continue end
            if not IsPlayerAlive(player) then continue end
            
            local enemyChar = player.Character
            if not enemyChar then continue end
            local enemyRoot = GetCharacterRoot(enemyChar)
            if not enemyRoot then continue end
            
            local dist = (root.Position - enemyRoot.Position).Magnitude
            if dist < Config.punchAuraRange then
                local myHitbox = char:FindFirstChild("hitbox")
                local targetHitbox = enemyChar:FindFirstChild("hitbox")
                
                if myHitbox and targetHitbox and firetouchinterest then
                    pcall(function() firetouchinterest(myHitbox, targetHitbox, 0) end)
                    pcall(function() firetouchinterest(myHitbox, targetHitbox, 1) end)
                end
                
                pcall(function()
                    if mouse1click then
                        mouse1click()
                    elseif mouse1press and mouse1release then
                        mouse1press()
                        mouse1release()
                    end
                end)
            end
        end
    else
        WinMode.AllowFall()
    end
end

function PunchAura.GetNearbyEnemy()
    local char = LocalPlayer.Character
    if not char then return nil end
    
    local root = GetCharacterRoot(char)
    if not root then return nil end
    
    local myPos = root.Position
    local closestEnemy = nil
    local closestDist = Config.punchAuraRange
    
    for _, player in ipairs(Players:GetPlayers()) do
        if player == LocalPlayer then continue end
        if not IsPlayerAlive(player) then continue end
        
        local enemyChar = player.Character
        if not enemyChar then continue end
        
        local enemyRoot = GetCharacterRoot(enemyChar)
        if not enemyRoot then continue end
        
        local dist = (enemyRoot.Position - myPos).Magnitude
        if dist < closestDist then
            closestDist = dist
            closestEnemy = player
        end
    end
    
    return closestEnemy
end

function PunchAura.PerformPunch(targetPlayer)
    local char = LocalPlayer.Character
    if not char then return end
    
    local root = GetCharacterRoot(char)
    if not root then return end
    
    local targetChar = targetPlayer.Character
    if not targetChar then return end
    
    local targetRoot = GetCharacterRoot(targetChar)
    if not targetRoot then return end
    
    local myHitbox = char:FindFirstChild("hitbox")
    local targetHitbox = targetChar:FindFirstChild("hitbox")
    
    local lookAtTarget = CFrame.new(root.Position, Vector3.new(targetRoot.Position.X, root.Position.Y, targetRoot.Position.Z))
    root.CFrame = lookAtTarget
    
    if myHitbox and targetHitbox and firetouchinterest then
        pcall(function() firetouchinterest(myHitbox, targetHitbox, 0) end)
        pcall(function() firetouchinterest(myHitbox, targetHitbox, 1) end)
        
        for _, part in pairs(targetChar:GetChildren()) do
            if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
                pcall(function()
                    firetouchinterest(myHitbox, part, 0)
                    firetouchinterest(myHitbox, part, 1)
                end)
            end
        end
    end
    
    pcall(function()
        if mouse1click then
            mouse1click()
        elseif mouse1press and mouse1release then
            mouse1press()
            mouse1release()
        end
    end)
end

function PunchAura.Update()
    if not Config.punchAuraEnabled then return end
    
    local now = tick()
    if now - State.LastPunch < Config.punchAuraSpeed then return end
    
    local nearbyEnemy = PunchAura.GetNearbyEnemy()
    if not nearbyEnemy then return end
    
    State.LastPunch = now
    PunchAura.PerformPunch(nearbyEnemy)
end

local function AntiRagdoll()
    if not Config.antiRagdollEnabled then return end
    pcall(function()
        local char = LocalPlayer.Character
        if char then
            local ragdollScript = char:FindFirstChild("RagdollSCript")
            if ragdollScript then ragdollScript:Destroy() end
        end
    end)
end

local function SpeedHack()
    if not Config.speedHackEnabled then return end
    pcall(function()
        local char = LocalPlayer.Character
        if char then
            local hum = GetCharacterHumanoid(char)
            if hum then hum.WalkSpeed = Config.speedHackValue end
        end
    end)
end


local function TeleportTo(target)
    local char = LocalPlayer.Character
    if not char then return false end
    local root = GetCharacterRoot(char)
    if not root then return false end
    
    local targetPart = nil
    if typeof(target) == "Instance" then
        if target:IsA("BasePart") then
            targetPart = target
        elseif target:IsA("Model") then
            targetPart = target.PrimaryPart or target:FindFirstChildWhichIsA("BasePart")
        end
    end
    
    if not targetPart then return false end
    
    root.CFrame = targetPart.CFrame + Vector3.new(0, 3, 0)
    return true
end

local function KillCharacter()
    local char = LocalPlayer.Character
    if not char then return end
    
    local hum = GetCharacterHumanoid(char)
    local root = GetCharacterRoot(char)
    
    if root then
        root.CFrame = CFrame.new(0, -500, 0)
    end
    
    if hum then
        pcall(function() hum.Health = 0 end)
    end
end

local function WaitForRespawn()
    local startTime = tick()
    local timeout = 10
    
    while tick() - startTime < timeout do
        local char = LocalPlayer.Character
        if char then
            local hum = GetCharacterHumanoid(char)
            local root = GetCharacterRoot(char)
            if hum and hum.Health > 0 and root and root.Position.Y > -100 then
                task.wait(0.5)
                return true
            end
        end
        task.wait(0.1)
    end
    
    return false
end

local function GetGameStateForFarm()
    local state = {
        matchRunning = false,
        finalBattle = false
    }
    
    local partidaRolando = Workspace:FindFirstChild("partidaRolando")
    if partidaRolando then state.matchRunning = partidaRolando.Value end
    
    local finalBattle = Workspace:FindFirstChild("finalBattle")
    if finalBattle then state.finalBattle = finalBattle.Value end
    
    return state
end

local function WaitForMatchEnd()
    local timeout = 300
    local startTime = tick()
    
    while tick() - startTime < timeout do
        if not Config.autoFarmEnabled then return false end
        
        local gameState = GetGameStateForFarm()
        if not gameState.matchRunning then
            return true
        end
        
        task.wait(1)
    end
    
    return false
end

local function AutoFarmLoop()
    local trophyPos = Tuning.TrophyPosition
    
    while Config.autoFarmEnabled and State.Running do
        local char = LocalPlayer.Character
        if not char then 
            task.wait(0.5)
            continue 
        end
        
        local root = GetCharacterRoot(char)
        if not root then 
            task.wait(0.5)
            continue 
        end
        
        local trophy = Workspace:FindFirstChild("Trophy")
        if not trophy then 
            task.wait(1)
            continue 
        end
        
        root.CFrame = CFrame.new(trophyPos)
        
        if firetouchinterest then
            pcall(function()
                firetouchinterest(root, trophy, 0)
                firetouchinterest(root, trophy, 1)
            end)
        end
        
        task.wait(Config.autoFarmDelay)
    end
    State.Farming = false
end

local function StartAutoFarm()
    if State.Farming then return end
    State.Farming = true
    Threads["AutoFarm"] = task.spawn(AutoFarmLoop)
end

local function StopAutoFarm()
    Config.autoFarmEnabled = false
    if Threads["AutoFarm"] then
        pcall(function() task.cancel(Threads["AutoFarm"]) end)
        Threads["AutoFarm"] = nil
    end
    State.Farming = false
end

local function SafeCancel(name)
    if Threads[name] then
        pcall(function() task.cancel(Threads[name]) end)
        Threads[name] = nil
    end
end

local function DisconnectAll()
    for name, conn in pairs(Cache.Connections) do
        pcall(function() conn:Disconnect() end)
        Cache.Connections[name] = nil
    end
end

local function Unload()
    State.Running = false
    State.Unloaded = true
    Config.autoFarmEnabled = false
    Config.winModeEnabled = false
    
    pcall(function() WinMode.StopFlying() end)
    
    task.wait(0.1)
    DisconnectAll()
    
    for name in pairs(Threads) do
        SafeCancel(name)
    end
    
    ESP.ClearAll()
    Cache.LaserData = {}
    
    if ScreenGui then
        pcall(function() ScreenGui:Destroy() end)
        ScreenGui = nil
    end
    
    getgenv().BlindShotOP = nil
end

local function CreateGUI()
    local isMobile = UserInputService.TouchEnabled
    
    ScreenGui = Instance.new("ScreenGui")
    ScreenGui.Name = "BlindShotGUI"
    ScreenGui.ResetOnSpawn = false
    ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
    ScreenGui.IgnoreGuiInset = true
    
    pcall(function()
        if syn then
            syn.protect_gui(ScreenGui)
        elseif gethui then
            ScreenGui.Parent = gethui()
            return
        end
    end)
    
    ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
    
    local Accent = Color3.fromRGB(220, 60, 60)
    local GlassBg = Color3.fromRGB(40, 44, 52)
    local GlassCard = Color3.fromRGB(55, 60, 70)
    local TextPrimary = Color3.fromRGB(255, 255, 255)
    local TextSecondary = Color3.fromRGB(140, 145, 155)
    
    local MainContainer = Instance.new("Frame")
    MainContainer.Name = "MainContainer"
    MainContainer.AnchorPoint = Vector2.new(0.5, 0.5)
    MainContainer.Position = UDim2.new(0.5, 0, 0.5, 0)
    MainContainer.Size = isMobile and UDim2.new(0, 340, 0, 380) or UDim2.new(0, 520, 0, 360)
    MainContainer.BackgroundColor3 = GlassBg
    MainContainer.BackgroundTransparency = 0.05
    MainContainer.BorderSizePixel = 0
    MainContainer.ClipsDescendants = true
    MainContainer.Parent = ScreenGui
    
    local MainCorner = Instance.new("UICorner")
    MainCorner.CornerRadius = UDim.new(0, 16)
    MainCorner.Parent = MainContainer
    
    local TopBar = Instance.new("Frame")
    TopBar.Size = UDim2.new(1, 0, 0, 44)
    TopBar.BackgroundColor3 = Color3.fromRGB(35, 38, 46)
    TopBar.BackgroundTransparency = 0.3
    TopBar.BorderSizePixel = 0
    TopBar.Parent = MainContainer
    
    local TopCorner = Instance.new("UICorner")
    TopCorner.CornerRadius = UDim.new(0, 16)
    TopCorner.Parent = TopBar
    
    local TitleLabel = Instance.new("TextLabel")
    TitleLabel.Size = UDim2.new(0, 120, 0, 30)
    TitleLabel.Position = UDim2.new(0, 12, 0.5, -15)
    TitleLabel.BackgroundTransparency = 1
    TitleLabel.Text = "BLIND SHOT"
    TitleLabel.TextSize = 16
    TitleLabel.Font = Enum.Font.GothamBold
    TitleLabel.TextColor3 = Accent
    TitleLabel.TextXAlignment = Enum.TextXAlignment.Left
    TitleLabel.Parent = TopBar
    
    local PowerBtn = Instance.new("ImageButton")
    PowerBtn.Size = UDim2.new(0, 28, 0, 28)
    PowerBtn.Position = UDim2.new(1, -42, 0.5, -14)
    PowerBtn.BackgroundColor3 = Color3.fromRGB(200, 60, 60)
    PowerBtn.BackgroundTransparency = 0.6
    PowerBtn.BorderSizePixel = 0
    PowerBtn.Image = "rbxassetid://97421363782839"
    PowerBtn.ImageColor3 = TextPrimary
    PowerBtn.Parent = TopBar
    
    local PowerCorner = Instance.new("UICorner")
    PowerCorner.CornerRadius = UDim.new(0, 8)
    PowerCorner.Parent = PowerBtn
    
    PowerBtn.MouseButton1Click:Connect(Unload)
    
    local ContentFrame = Instance.new("ScrollingFrame")
    ContentFrame.Size = UDim2.new(1, -16, 1, -52)
    ContentFrame.Position = UDim2.new(0, 8, 0, 48)
    ContentFrame.BackgroundTransparency = 1
    ContentFrame.ScrollBarThickness = isMobile and 6 or 4
    ContentFrame.ScrollBarImageColor3 = Accent
    ContentFrame.CanvasSize = UDim2.new(0, 0, 0, isMobile and 600 or 520)
    ContentFrame.Parent = MainContainer
    
    local ContentLayout = Instance.new("UIGridLayout")
    ContentLayout.CellSize = isMobile and UDim2.new(0.5, -4, 0, 48) or UDim2.new(0.5, -4, 0, 44)
    ContentLayout.CellPadding = UDim2.new(0, 6, 0, 6)
    ContentLayout.SortOrder = Enum.SortOrder.LayoutOrder
    ContentLayout.Parent = ContentFrame
    
    local function CreateToggle(label, default, callback, order)
        local Frame = Instance.new("Frame")
        Frame.BackgroundColor3 = GlassCard
        Frame.BackgroundTransparency = 0.4
        Frame.BorderSizePixel = 0
        Frame.LayoutOrder = order or 0
        Frame.Parent = ContentFrame
        
        local Corner = Instance.new("UICorner")
        Corner.CornerRadius = UDim.new(0, 12)
        Corner.Parent = Frame
        
        local Label = Instance.new("TextLabel")
        Label.Size = UDim2.new(1, -60, 1, 0)
        Label.Position = UDim2.new(0, 10, 0, 0)
        Label.BackgroundTransparency = 1
        Label.Text = label
        Label.TextSize = isMobile and 9 or 11
        Label.Font = Enum.Font.GothamMedium
        Label.TextColor3 = TextPrimary
        Label.TextXAlignment = Enum.TextXAlignment.Left
        Label.TextTruncate = Enum.TextTruncate.AtEnd
        Label.Parent = Frame
        
        local toggleSize = isMobile and 32 or 40
        local toggleHeight = isMobile and 18 or 22
        
        local ToggleBg = Instance.new("Frame")
        ToggleBg.Size = UDim2.new(0, toggleSize, 0, toggleHeight)
        ToggleBg.Position = UDim2.new(1, -toggleSize - 8, 0.5, -toggleHeight/2)
        ToggleBg.BackgroundColor3 = default and Accent or Color3.fromRGB(60, 65, 75)
        ToggleBg.BorderSizePixel = 0
        ToggleBg.Parent = Frame
        
        local BgCorner = Instance.new("UICorner")
        BgCorner.CornerRadius = UDim.new(1, 0)
        BgCorner.Parent = ToggleBg
        
        local circleSize = isMobile and 12 or 16
        
        local Circle = Instance.new("Frame")
        Circle.Size = UDim2.new(0, circleSize, 0, circleSize)
        Circle.Position = default and UDim2.new(1, -circleSize - 3, 0.5, -circleSize/2) or UDim2.new(0, 3, 0.5, -circleSize/2)
        Circle.BackgroundColor3 = TextPrimary
        Circle.BorderSizePixel = 0
        Circle.Parent = ToggleBg
        
        local CircleCorner = Instance.new("UICorner")
        CircleCorner.CornerRadius = UDim.new(1, 0)
        CircleCorner.Parent = Circle
        
        local enabled = default
        local Btn = Instance.new("TextButton")
        Btn.Size = UDim2.new(1, 0, 1, 0)
        Btn.BackgroundTransparency = 1
        Btn.Text = ""
        Btn.Parent = Frame
        
        Btn.MouseButton1Click:Connect(function()
            enabled = not enabled
            TweenService:Create(ToggleBg, TweenInfo.new(0.2), {
                BackgroundColor3 = enabled and Accent or Color3.fromRGB(60, 65, 75)
            }):Play()
            TweenService:Create(Circle, TweenInfo.new(0.2, Enum.EasingStyle.Back), {
                Position = enabled and UDim2.new(1, -circleSize - 3, 0.5, -circleSize/2) or UDim2.new(0, 3, 0.5, -circleSize/2)
            }):Play()
            callback(enabled)
        end)
        
        return Frame
    end
    
    local function CreateSlider(label, min, max, default, callback, order)
        min = math.min(min, max)
        default = math.clamp(default, min, max)
        
        local Frame = Instance.new("Frame")
        Frame.BackgroundColor3 = GlassCard
        Frame.BackgroundTransparency = 0.4
        Frame.BorderSizePixel = 0
        Frame.LayoutOrder = order or 0
        Frame.Parent = ContentFrame
        
        local Corner = Instance.new("UICorner")
        Corner.CornerRadius = UDim.new(0, 12)
        Corner.Parent = Frame
        
        local Label = Instance.new("TextLabel")
        Label.Size = UDim2.new(0.6, 0, 0, 18)
        Label.Position = UDim2.new(0, 12, 0, 4)
        Label.BackgroundTransparency = 1
        Label.Text = label
        Label.TextSize = 10
        Label.Font = Enum.Font.GothamMedium
        Label.TextColor3 = TextPrimary
        Label.TextXAlignment = Enum.TextXAlignment.Left
        Label.Parent = Frame
        
        local Value = Instance.new("TextLabel")
        Value.Size = UDim2.new(0.3, 0, 0, 18)
        Value.Position = UDim2.new(0.7, -12, 0, 4)
        Value.BackgroundTransparency = 1
        Value.Text = tostring(default)
        Value.TextSize = 10
        Value.Font = Enum.Font.GothamBold
        Value.TextColor3 = Accent
        Value.TextXAlignment = Enum.TextXAlignment.Right
        Value.Parent = Frame
        
        local sliderHeight = isMobile and 10 or 6
        local sliderY = isMobile and 32 or 28
        
        local SliderBg = Instance.new("Frame")
        SliderBg.Size = UDim2.new(1, -24, 0, sliderHeight)
        SliderBg.Position = UDim2.new(0, 12, 0, sliderY)
        SliderBg.BackgroundColor3 = Color3.fromRGB(50, 55, 65)
        SliderBg.BorderSizePixel = 0
        SliderBg.Parent = Frame
        
        local BgCorner = Instance.new("UICorner")
        BgCorner.CornerRadius = UDim.new(1, 0)
        BgCorner.Parent = SliderBg
        
        local Fill = Instance.new("Frame")
        Fill.Size = UDim2.new((default - min) / (max - min), 0, 1, 0)
        Fill.BackgroundColor3 = Accent
        Fill.BorderSizePixel = 0
        Fill.Parent = SliderBg
        
        local FillCorner = Instance.new("UICorner")
        FillCorner.CornerRadius = UDim.new(1, 0)
        FillCorner.Parent = Fill
        
        local currentValue = default
        local dragging = false
        
        local hitAreaHeight = isMobile and 36 or 20
        
        local SliderBtn = Instance.new("TextButton")
        SliderBtn.Size = UDim2.new(1, 0, 0, hitAreaHeight)
        SliderBtn.Position = UDim2.new(0, 0, 0, isMobile and 18 or 20)
        SliderBtn.BackgroundTransparency = 1
        SliderBtn.Text = ""
        SliderBtn.Parent = Frame
        
        local function UpdateSlider(inputPos)
            local pct = math.clamp((inputPos - SliderBg.AbsolutePosition.X) / SliderBg.AbsoluteSize.X, 0, 1)
            currentValue = math.floor((min + (max - min) * pct) * 100) / 100
            Fill.Size = UDim2.new(pct, 0, 1, 0)
            Value.Text = tostring(currentValue)
            callback(currentValue)
        end
        
        SliderBtn.InputBegan:Connect(function(input)
            if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
                dragging = true
                UpdateSlider(input.Position.X)
            end
        end)
        
        SliderBtn.InputEnded:Connect(function(input)
            if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
                dragging = false
            end
        end)
        
        Cache.Connections["Slider_" .. label] = UserInputService.InputChanged:Connect(function(input)
            if dragging and State.Running and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
                UpdateSlider(input.Position.X)
            end
        end)
        
        return Frame
    end
    
    CreateToggle("ESP Enabled", true, function(v) Config.espEnabled = v end, 1)
    CreateToggle("Show Names", true, function(v) Config.espShowName = v end, 2)
    CreateToggle("Show Distance", true, function(v) Config.espShowDistance = v end, 3)
    CreateToggle("Laser ESP", true, function(v) Config.espLaserESP = v end, 4)
    CreateToggle("Boxes", true, function(v) Config.espBoxes = v end, 5)
    CreateToggle("Tracers", false, function(v) Config.espTracers = v end, 6)
    
    CreateToggle("WIN MODE", false, function(v) Config.winModeEnabled = v end, 7)
    CreateSlider("Safe Radius", 2, 15, 5, function(v) Config.winModeSafeRadius = v end, 8)
    
    CreateToggle("Aimbot (RMB)", false, function(v) Config.aimbotEnabled = v end, 9)
    CreateSlider("Aim Smooth", 0.05, 0.5, 0.2, function(v) Config.aimbotSmooth = v end, 10)
    
    CreateToggle("Punch Aura", false, function(v) Config.punchAuraEnabled = v end, 11)
    CreateSlider("Punch Range", 5, 30, 15, function(v) Config.punchAuraRange = v end, 12)
    
    CreateToggle("Auto Farm", false, function(v)
        Config.autoFarmEnabled = v
        if v then StartAutoFarm() else StopAutoFarm() end
    end, 13)
    CreateSlider("Farm Delay", 0.5, 5, 1.5, function(v) Config.autoFarmDelay = v end, 14)
    
    CreateToggle("Anti Ragdoll", true, function(v) Config.antiRagdollEnabled = v end, 15)
    CreateToggle("Speed Hack", false, function(v) Config.speedHackEnabled = v end, 16)
    CreateSlider("Speed Value", 16, 100, 25, function(v) Config.speedHackValue = v end, 17)
    
    local dragging = false
    local dragStart, startPos
    
    local function StartDrag(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            dragging = true
            dragStart = input.Position
            startPos = MainContainer.Position
        end
    end
    
    local function StopDrag(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            dragging = false
        end
    end
    
    TopBar.InputBegan:Connect(StartDrag)
    TopBar.InputEnded:Connect(StopDrag)
    MainContainer.InputBegan:Connect(StartDrag)
    MainContainer.InputEnded:Connect(StopDrag)
    
    Cache.Connections["Drag"] = UserInputService.InputChanged:Connect(function(input)
        if dragging and State.Running and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
            local delta = input.Position - dragStart
            MainContainer.Position = UDim2.new(
                startPos.X.Scale, startPos.X.Offset + delta.X,
                startPos.Y.Scale, startPos.Y.Offset + delta.Y
            )
        end
    end)
    
    if isMobile then
        local MobileToggle = Instance.new("TextButton")
        MobileToggle.Name = "MobileToggle"
        MobileToggle.Size = UDim2.new(0, 42, 0, 42)
        MobileToggle.Position = UDim2.new(1, -52, 0, 10)
        MobileToggle.BackgroundColor3 = GlassBg
        MobileToggle.BackgroundTransparency = 0.1
        MobileToggle.BorderSizePixel = 0
        MobileToggle.Text = "GUI"
        MobileToggle.TextSize = 12
        MobileToggle.Font = Enum.Font.GothamBold
        MobileToggle.TextColor3 = TextPrimary
        MobileToggle.ZIndex = 100
        MobileToggle.Parent = ScreenGui
        
        local MobileCorner = Instance.new("UICorner")
        MobileCorner.CornerRadius = UDim.new(1, 0)
        MobileCorner.Parent = MobileToggle
        
        local MobileStroke = Instance.new("UIStroke")
        MobileStroke.Color = Accent
        MobileStroke.Thickness = 2
        MobileStroke.Parent = MobileToggle
        
        local visible = true
        local mobileDragging = false
        local mobileDragStart, mobileStartPos
        
        MobileToggle.MouseButton1Click:Connect(function()
            if not mobileDragging then
                visible = not visible
                MainContainer.Visible = visible
            end
        end)
        
        MobileToggle.InputBegan:Connect(function(input)
            if input.UserInputType == Enum.UserInputType.Touch then
                mobileDragging = false
                mobileDragStart = input.Position
                mobileStartPos = MobileToggle.Position
            end
        end)
        
        MobileToggle.InputChanged:Connect(function(input)
            if input.UserInputType == Enum.UserInputType.Touch then
                local delta = input.Position - mobileDragStart
                if delta.Magnitude > 10 then
                    mobileDragging = true
                    local screenSize = ScreenGui.AbsoluteSize
                    local btnSize = MobileToggle.AbsoluteSize
                    local newX = math.clamp(mobileStartPos.X.Offset + delta.X, 10, screenSize.X - btnSize.X - 10)
                    local newY = math.clamp(mobileStartPos.Y.Offset + delta.Y, 50, screenSize.Y - btnSize.Y - 10)
                    MobileToggle.Position = UDim2.new(0, newX, 0, newY)
                end
            end
        end)
        
        MobileToggle.InputEnded:Connect(function(input)
            if input.UserInputType == Enum.UserInputType.Touch then
                task.wait(0.1)
                mobileDragging = false
            end
        end)
        
        local AimToggle = Instance.new("TextButton")
        AimToggle.Name = "AimToggle"
        AimToggle.Size = UDim2.new(0, 42, 0, 42)
        AimToggle.Position = UDim2.new(1, -52, 0, 60)
        AimToggle.BackgroundColor3 = Color3.fromRGB(60, 65, 75)
        AimToggle.BackgroundTransparency = 0.1
        AimToggle.BorderSizePixel = 0
        AimToggle.Text = "AIM"
        AimToggle.TextSize = 11
        AimToggle.Font = Enum.Font.GothamBold
        AimToggle.TextColor3 = TextSecondary
        AimToggle.Visible = false
        AimToggle.ZIndex = 100
        AimToggle.Parent = ScreenGui
        
        local AimCorner = Instance.new("UICorner")
        AimCorner.CornerRadius = UDim.new(1, 0)
        AimCorner.Parent = AimToggle
        
        local AimStroke = Instance.new("UIStroke")
        AimStroke.Color = Color3.fromRGB(60, 65, 75)
        AimStroke.Thickness = 2
        AimStroke.Parent = AimToggle
        
        local aimActive = false
        
        AimToggle.MouseButton1Click:Connect(function()
            aimActive = not aimActive
            State.MobileAiming = aimActive
            AimToggle.BackgroundColor3 = aimActive and Accent or Color3.fromRGB(60, 65, 75)
            AimToggle.TextColor3 = aimActive and TextPrimary or TextSecondary
            AimStroke.Color = aimActive and Accent or Color3.fromRGB(60, 65, 75)
        end)
        
        task.spawn(function()
            while State.Running and not State.Unloaded do
                task.wait(0.1)
                pcall(function()
                    AimToggle.Visible = Config.aimbotEnabled
                    if not Config.aimbotEnabled and aimActive then
                        aimActive = false
                        State.MobileAiming = false
                        AimToggle.BackgroundColor3 = Color3.fromRGB(60, 65, 75)
                        AimToggle.TextColor3 = TextSecondary
                        AimStroke.Color = Color3.fromRGB(60, 65, 75)
                    end
                end)
            end
        end)
    end
end

local function MainLoop()
    if State.Unloaded then return end
    
    Camera = Workspace.CurrentCamera
    if not Camera then return end
    
    local now = tick()
    
    local shouldThrottleESP = Config.winModeEnabled and IsMobileDevice
    if shouldThrottleESP then
        if now - State.LastESPUpdate >= UpdateIntervals.ESP then
            State.LastESPUpdate = now
            for _, player in ipairs(Players:GetPlayers()) do
                pcall(function() ESP.Render(player) end)
            end
        end
    else
        for _, player in ipairs(Players:GetPlayers()) do
            pcall(function() ESP.Render(player) end)
        end
    end
    
    pcall(function() Aimbot.Update() end)
    pcall(function() WinMode.Update() end)
    pcall(function() PunchAura.Update() end)
    
    AntiRagdoll()
    SpeedHack()
end

Cache.Connections.RenderStepped = RunService.RenderStepped:Connect(MainLoop)

Cache.Connections.PlayerRemoving = Players.PlayerRemoving:Connect(function(player)
    ESP.Remove(player)
    Cache.LaserData[player] = nil
end)

Cache.Connections.CharacterAdded = LocalPlayer.CharacterAdded:Connect(function()
    task.wait(0.5)
    AntiRagdoll()
end)

CreateGUI()

getgenv().BlindShotOP = {
    Config = Config,
    State = State,
    Unload = Unload,
    TeleportTo = TeleportTo
}

Features & Information

Tested on Delta ios, Xeno and pot a ssium windows. Auto win mode does some calculations to find the right spot to stop so you are never hit, with that on some lower end devices it can be laggy. Features: Auto farm trophy Win mode (During arena match, it will guarantee kills while trying to keep you from being shot, in the final 1v1 match, it will turn on no ragdoll and float in the air, making it so that the opponent falls and loses nomatter what) Win mode can be fully AFKed Esp: Boxes, Tracers, Laser ESP, Names, Distance Punch Aura Anti Ragdoll Speed Hack
#blind shot#source#mobile#blindshot

Community Comments (1)

leetleetJan 16, 2026

This script was bugged it is now visible.

More Scripts for [UPD] Blind Shot