-- ========================================== -- MIRA FIRME - CORPO MIRA / CÂMERA LIVRE (ANTI-VOID FIX) -- ========================================== local UserInputService = game:GetService("UserInputService") local Players = game:GetService("Players") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer local Camera = workspace.CurrentCamera -- ========= CONFIG ========= local MAX_DISTANCE = 1500 local FOV = 400 -- ========= ESTADO ========= local isActive = false local target = nil local renderName = "AimbotLock_BodyTarget" -- ========================================== -- 1. INTERFACE -- ========================================== local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "MenuMira" ScreenGui.Parent = game.CoreGui ScreenGui.ResetOnSpawn = false local ToggleButton = Instance.new("TextButton") ToggleButton.Parent = ScreenGui ToggleButton.BackgroundColor3 = Color3.fromRGB(0, 0, 255) ToggleButton.Position = UDim2.new(0.1, 0, 0.2, 0) ToggleButton.Size = UDim2.new(0, 150, 0, 50) ToggleButton.Font = Enum.Font.SourceSansBold ToggleButton.Text = "Mira: DESATIVADA" ToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255) ToggleButton.TextSize = 18 ToggleButton.Active = true local UICorner = Instance.new("UICorner") UICorner.CornerRadius = UDim.new(0, 10) UICorner.Parent = ToggleButton -- Arrastar botão na tela local dragging, dragInput, mousePos, framePos = false, nil, nil, nil ToggleButton.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true mousePos = input.Position framePos = 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 local delta = input.Position - mousePos ToggleButton.Position = UDim2.new( framePos.X.Scale, framePos.X.Offset + delta.X, framePos.Y.Scale, framePos.Y.Offset + delta.Y ) end end) -- ========================================== -- 2. VERIFICAÇÕES -- ========================================== local function alvoVivo(char) if not char or not char.Parent then return false end local hum = char:FindFirstChildOfClass("Humanoid") if not hum or hum.Health <= 0 then return false end return true end -- ========================================== -- 3. PROCURAR NOVO ALVO (Players + NPCs) -- ========================================== local function encontrarNovoAlvo() local melhor, menorDist = nil, math.huge local centro = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2) local origem = Camera.CFrame.Position local lista = {} for _, plr in pairs(Players:GetPlayers()) do if plr ~= LocalPlayer and plr.Character then table.insert(lista, plr.Character) end end for _, obj in pairs(workspace:GetDescendants()) do if obj:IsA("Model") and obj:FindFirstChildOfClass("Humanoid") then if not Players:GetPlayerFromCharacter(obj) and obj ~= LocalPlayer.Character then table.insert(lista, obj) end end end for _, char in pairs(lista) do if char ~= LocalPlayer.Character and alvoVivo(char) then local head = char:FindFirstChild("Head") or char:FindFirstChild("HumanoidRootPart") if head then local dist = (origem - head.Position).Magnitude if dist <= MAX_DISTANCE then local sp, onScreen = Camera:WorldToViewportPoint(head.Position) if onScreen then local d = (Vector2.new(sp.X, sp.Y) - centro).Magnitude if d <= FOV and d < menorDist then menorDist = d melhor = char end end end end end end return melhor end -- ========================================== -- 4. LOOP ANTI-VOID (ROTAÇÃO SEGURA) -- ========================================== local function tick() if not alvoVivo(target) then target = encontrarNovoAlvo() end if target then local myChar = LocalPlayer.Character if not alvoVivo(myChar) then return end local myRoot = myChar:FindFirstChild("HumanoidRootPart") local head = target:FindFirstChild("Head") or target:FindFirstChild("HumanoidRootPart") if myRoot and head then -- Calcula a direção mantendo a altura Y idêntica para não inclinar o personagem local targetPos = head.Position local rootPos = myRoot.Position local dir = Vector3.new(targetPos.X - rootPos.X, 0, targetPos.Z - rootPos.Z) -- Evita cálculos zerados/inválidos quando estiver encostado no alvo ou sofrendo knockback if dir.Magnitude > 0.1 then local newCFrame = CFrame.lookAt(rootPos, rootPos + dir) -- Aplica apenas a rotação mantendo a física da posição intacta (evita cair no void ao tomar dano/ataques) myRoot.CFrame = CFrame.new(rootPos) * (newCFrame - newCFrame.Position) end end end end -- ========================================== -- 5. ATIVAR / DESATIVAR -- ========================================== local function ativarMira() print("[MIRA] Ativada!") RunService:BindToRenderStep(renderName, Enum.RenderPriority.Character.Value + 1, tick) end local function desativarMira() print("[MIRA] Desativada.") pcall(function() RunService:UnbindFromRenderStep(renderName) end) target = nil end ToggleButton.MouseButton1Click:Connect(function() isActive = not isActive if isActive then ToggleButton.BackgroundColor3 = Color3.fromRGB(0, 255, 0) ToggleButton.Text = "Mira: ATIVADA" ativarMira() else ToggleButton.BackgroundColor3 = Color3.fromRGB(0, 0, 255) ToggleButton.Text = "Mira: DESATIVADA" desativarMira() end end)