-- AIMBOT FINAL (LocalScript) - Pegar en StarterPlayerScripts -- Funciona en PC y móviles. GUI ancha, botón OPEN a la derecha (no tapado). -- Requisitos: tu juego debe usar Teams (opcional). NPCs son modelos con Humanoid no asociados a Players. local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UIS = game:GetService("UserInputService") local TeamsService = game:GetService("Teams") local LocalPlayer = Players.LocalPlayer local Camera = workspace.CurrentCamera -- ====== CONFIG ====== local SMOOTH = 0.18 -- 0..1 (menor= más suave). Ajusta si quieres. local MAX_DIST = 1500 -- distancia máxima a considerar local FOV = 9999 -- si quieres limitar por pantalla, pon valor menor (en píxeles) local NPC_SEARCH_FOLDER = workspace -- puedes cambiar a workspace.NPCS si tienes carpeta -- ====== ESTADO ====== local AimbotOn = false local TeamAimbotOn = false local NPCAimbotOn = false local SelectedPlayer = nil -- Player object (override por lista) local SelectedTeam = nil -- Team object (override por Select Team) local TargetPartName = "Head" -- parte por defecto local CurrentTargetModel = nil -- ====== UTIL ====== local function isPlayerCharacter(model) return model and Players:GetPlayerFromCharacter(model) ~= nil end local function isAliveModel(model) if not model or not model:IsA("Model") then return false end local hum = model:FindFirstChildWhichIsA("Humanoid") if not hum then return false end return hum.Health > 0 end local function getPart(model, partName) if not model then return nil end local p = model:FindFirstChild(partName) if p and p:IsA("BasePart") then return p end -- fallbacks local fallbacks = {"Head","HumanoidRootPart","UpperTorso","LowerTorso","Torso"} for _,name in ipairs(fallbacks) do local q = model:FindFirstChild(name) if q and q:IsA("BasePart") then return q end end return nil end -- ====== BUSCADORES ====== -- jugador vivo más cercano; if filterFunc provided, use it to filter players local function getClosestPlayer(filterFunc) local best = nil local bestDist = math.huge local camPos = Camera.CFrame.Position for _,pl in ipairs(Players:GetPlayers()) do if pl ~= LocalPlayer and pl.Character and isAliveModel(pl.Character) then if not filterFunc or filterFunc(pl) then local hrp = pl.Character:FindFirstChild("HumanoidRootPart") or pl.Character.PrimaryPart if hrp then local d = (hrp.Position - camPos).Magnitude if d < bestDist and d <= MAX_DIST then -- opcional: comprobar FOV en pantalla local screenPos, onScreen = Camera:WorldToViewportPoint(hrp.Position) if FOV >= 9999 or (onScreen and (Vector2.new(screenPos.X, screenPos.Y) - Vector2.new(UIS:GetMouseLocation().X, UIS:GetMouseLocation().Y)).Magnitude <= FOV) then bestDist = d best = pl end end end end end end return best end -- NPC más cercano (modelos con Humanoid y no player characters) local function getClosestNPC() local best = nil local bestDist = math.huge local camPos = Camera.CFrame.Position for _,obj in ipairs(NPC_SEARCH_FOLDER:GetChildren()) do if obj:IsA("Model") and not Players:GetPlayerFromCharacter(obj) then local hum = obj:FindFirstChildWhichIsA("Humanoid") local hrp = obj:FindFirstChild("HumanoidRootPart") or obj.PrimaryPart if hum and hrp and hum.Health > 0 then local d = (hrp.Position - camPos).Magnitude if d < bestDist and d <= MAX_DIST then bestDist = d best = obj end end end end return best end -- ====== RESOLVER TARGET con prioridad y chequeos (retarget si muere) ====== local function resolveTarget() -- 1) Override por selección manual if SelectedPlayer and SelectedPlayer.Character and isAliveModel(SelectedPlayer.Character) then return SelectedPlayer.Character else SelectedPlayer = nil end -- 2) NPC AIMBOT prioridad si está encendido if NPCAimbotOn then local npc = getClosestNPC() if npc then return npc end end -- 3) Team AIMBOT: si tienes SelectedTeam -> target players in that team; else target enemies (player.Team ~= LocalPlayer.Team) if TeamAimbotOn then -- si seleccionaste un equipo explícito, apuntar a miembros de ese equipo if SelectedTeam then local playerFromSelectedTeam = getClosestPlayer(function(pl) return pl.Team == SelectedTeam end) if playerFromSelectedTeam then return playerFromSelectedTeam.Character end else -- apuntar a players cuyo team != tu team (si no hay equipos, esto funcionará como FFA) local enemy = getClosestPlayer(function(pl) return pl.Team ~= LocalPlayer.Team end) if enemy then return enemy.Character end end end -- 4) Aimbot normal: cualquier jugador cercano local anyp = getClosestPlayer() if anyp then return anyp.Character end -- 5) fallback: NPCs local fallbackNPC = getClosestNPC() return fallbackNPC end -- ====== GUI: crear todo por código (abierto a la derecha) ====== local function createGUI() local sg = Instance.new("ScreenGui") sg.Name = "AimbotFinalGUI" sg.ResetOnSpawn = false sg.Parent = LocalPlayer:WaitForChild("PlayerGui") -- OPEN button (derecha, siempre visible) local openBtn = Instance.new("TextButton") openBtn.Name = "OpenBtn" openBtn.Size = UDim2.new(0,140,0,48) openBtn.Position = UDim2.new(1, -150, 0, 18) openBtn.AnchorPoint = Vector2.new(0,0) openBtn.Text = "OPEN" openBtn.Font = Enum.Font.GothamBold openBtn.TextScaled = true openBtn.BackgroundColor3 = Color3.fromRGB(10,10,10) openBtn.TextColor3 = Color3.fromRGB(0,255,255) openBtn.Parent = sg -- Main wide frame (centro) local frame = Instance.new("Frame") frame.Name = "Main" frame.Size = UDim2.new(0.78, 0, 0.78, 0) -- ancho grande pero no cubre right button frame.Position = UDim2.new(0.11, 0, 0.10, 0) frame.AnchorPoint = Vector2.new(0,0) frame.BackgroundColor3 = Color3.fromRGB(18,18,18) frame.BorderSizePixel = 0 frame.Visible = false frame.Parent = sg -- Title small local title = Instance.new("TextLabel", frame) title.Size = UDim2.new(1, -20, 0, 44) title.Position = UDim2.new(0.01, 0, 0.01, 0) title.BackgroundTransparency = 1 title.Text = "AIMBOT NEON - FINAL" title.Font = Enum.Font.GothamBlack title.TextScaled = true title.TextColor3 = Color3.fromRGB(0,255,200) -- Buttons small (compactos) local function smallBtn(text, y) local b = Instance.new("TextButton", frame) b.Size = UDim2.new(0, 120, 0, 34) b.Position = UDim2.new(0.02, (y-1)*128, 0, 56) b.Text = text b.Font = Enum.Font.GothamSemibold b.TextScaled = true b.BackgroundColor3 = Color3.fromRGB(10,10,10) b.TextColor3 = Color3.fromRGB(0,255,200) return b end -- positions: we'll create a horizontal row of small buttons near top local lockBtn = smallBtn("LOCK", 1) local teamBtn = smallBtn("TEAM", 2) local npcBtn = smallBtn("NPC", 3) local selectTeamBtn = smallBtn("SELECT TEAM", 4) -- Part input (small) local partBox = Instance.new("TextBox", frame) partBox.Size = UDim2.new(0, 220, 0, 30) partBox.Position = UDim2.new(0.02, 0, 0, 96) partBox.PlaceholderText = "Target part (Head)" partBox.Text = "" partBox.BackgroundColor3 = Color3.fromRGB(12,12,12) partBox.TextColor3 = Color3.fromRGB(0,255,200) -- Player list area (scroll) local playersScroll = Instance.new("ScrollingFrame", frame) playersScroll.Size = UDim2.new(0.96, 0, 0.6, 0) playersScroll.Position = UDim2.new(0.02, 0, 0, 140) playersScroll.BackgroundColor3 = Color3.fromRGB(10,10,10) playersScroll.BorderSizePixel = 0 playersScroll.ScrollBarThickness = 8 playersScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y local listLayout = Instance.new("UIListLayout", playersScroll) listLayout.Padding = UDim.new(0,6) -- Template local template = Instance.new("TextButton") template.Name = "Template" template.Size = UDim2.new(1, -10, 0, 36) template.BackgroundColor3 = Color3.fromRGB(8,8,8) template.TextColor3 = Color3.fromRGB(0,255,200) template.TextScaled = true template.Visible = false template.Parent = playersScroll -- TeamFrame (popup) local teamFrame = Instance.new("Frame", sg) teamFrame.Size = UDim2.new(0, 220, 0, 260) teamFrame.Position = UDim2.new(0.5, -110, 0.12, 0) teamFrame.BackgroundColor3 = Color3.fromRGB(12,12,12) teamFrame.BorderSizePixel = 0 teamFrame.Visible = false local teamScroll = Instance.new("ScrollingFrame", teamFrame) teamScroll.Size = UDim2.new(1, -10, 1, -10) teamScroll.Position = UDim2.new(0, 5, 0, 5) teamScroll.ScrollBarThickness = 6 teamScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y local teamListLayout = Instance.new("UIListLayout", teamScroll) teamListLayout.Padding = UDim.new(0,6) -- devuelve referencias return { ScreenGui = sg, OpenBtn = openBtn, Frame = frame, LockBtn = lockBtn, TeamBtn = teamBtn, NPCBtn = npcBtn, SelectTeamBtn = selectTeamBtn, PartBox = partBox, PlayersScroll = playersScroll, Template = template, TeamFrame = teamFrame, TeamScroll = teamScroll } end local UI = createGUI() -- ====== UI BEHAVIOR ====== UI.OpenBtn.MouseButton1Click:Connect(function() UI.Frame.Visible = not UI.Frame.Visible UI.OpenBtn.Text = UI.Frame.Visible and "CLOSE" or "OPEN" end) -- toggle small buttons UI.LockBtn.MouseButton1Click:Connect(function() AimbotOn = not AimbotOn UI.LockBtn.BackgroundColor3 = AimbotOn and Color3.fromRGB(0,60,0) or Color3.fromRGB(10,10,10) end) UI.TeamBtn.MouseButton1Click:Connect(function() TeamAimbotOn = not TeamAimbotOn UI.TeamBtn.BackgroundColor3 = TeamAimbotOn and Color3.fromRGB(0,60,0) or Color3.fromRGB(10,10,10) end) UI.NPCBtn.MouseButton1Click:Connect(function() NPCAimbotOn = not NPCAimbotOn UI.NPCBtn.BackgroundColor3 = NPCAimbotOn and Color3.fromRGB(0,60,0) or Color3.fromRGB(10,10,10) end) -- part box UI.PartBox.FocusLost:Connect(function() if UI.PartBox.Text and UI.PartBox.Text ~= "" then TargetPartName = UI.PartBox.Text else TargetPartName = "Head" end end) -- fill player list and selection local function fillPlayers() -- clear for _,c in ipairs(UI.PlayersScroll:GetChildren()) do if c:IsA("TextButton") and c ~= UI.Template then c:Destroy() end end for _,pl in ipairs(Players:GetPlayers()) do if pl ~= LocalPlayer then local b = UI.Template:Clone() b.Visible = true b.Text = pl.Name b.Parent = UI.PlayersScroll b.MouseButton1Click:Connect(function() SelectedPlayer = pl -- close list for cleaner view UI.Frame.Visible = true -- show selection on Open button small feedback UI.OpenBtn.Text = "OPEN - "..pl.Name end) end end end Players.PlayerAdded:Connect(fillPlayers) Players.PlayerRemoving:Connect(function() -- if selected player left, clear if SelectedPlayer and not Players:FindFirstChild(SelectedPlayer.Name) then SelectedPlayer = nil end fillPlayers() end) fillPlayers() -- fill teams list local function fillTeams() -- clear for _,c in ipairs(UI.TeamScroll:GetChildren()) do if c:IsA("TextButton") then c:Destroy() end end for _,t in ipairs(TeamsService:GetTeams()) do local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, -10, 0, 36) btn.Text = t.Name btn.Font = Enum.Font.GothamSemibold btn.TextScaled = true btn.TextColor3 = Color3.fromRGB(0,255,200) btn.BackgroundColor3 = Color3.fromRGB(10,10,10) btn.Parent = UI.TeamScroll btn.MouseButton1Click:Connect(function() SelectedTeam = t UI.TeamFrame.Visible = false UI.OpenBtn.Text = "OPEN - Team: "..t.Name end) end end UI.SelectTeamBtn.MouseButton1Click:Connect(function() fillTeams() UI.TeamFrame.Visible = not UI.TeamFrame.Visible end) -- RGB neon animation for text colors (simple) task.spawn(function() while true do for h = 0, 360, 3 do local col = Color3.fromHSV((h%360)/360, 1, 1) UI.OpenBtn.TextColor3 = col -- apply to buttons and title for _,d in ipairs(UI.Frame:GetDescendants()) do if d:IsA("TextLabel") or d:IsA("TextButton") then d.TextColor3 = col end end task.wait(0.02) end end end) -- ====== AIMBOT CORE: apunta al modelo resuelto (con suavizado) ====== RunService.RenderStepped:Connect(function(dt) if not AimbotOn and not TeamAimbotOn and not NPCAimbotOn then return end -- limpiar selección si murió if SelectedPlayer and (not SelectedPlayer.Character or not isAliveModel(SelectedPlayer.Character)) then SelectedPlayer = nil end -- resolve local model = resolveTarget() if not model then CurrentTargetModel = nil return end if not isAliveModel(model) then CurrentTargetModel = nil return end local part = getPart(model, TargetPartName) if not part then return end -- smooth lookAt local camPos = Camera.CFrame.Position local desired = CFrame.new(camPos, part.Position) local t = math.clamp(1 - SMOOTH, 0, 1) -- frame independent lerp local alpha = 1 - math.exp(-(1 - SMOOTH) * 60 * dt) Camera.CFrame = Camera.CFrame:Lerp(desired, alpha) CurrentTargetModel = model end) -- Hotkeys: F toggle UI, C toggle Aimbot, T toggle Team UIS.InputBegan:Connect(function(input, processed) if processed then return end if input.UserInputType == Enum.UserInputType.Keyboard then if input.KeyCode == Enum.KeyCode.F then UI.Frame.Visible = not UI.Frame.Visible UI.OpenBtn.Text = UI.Frame.Visible and "CLOSE" or "OPEN" elseif input.KeyCode == Enum.KeyCode.C then AimbotOn = not AimbotOn UI.LockBtn.BackgroundColor3 = AimbotOn and Color3.fromRGB(0,60,0) or Color3.fromRGB(10,10,10) elseif input.KeyCode == Enum.KeyCode.T then TeamAimbotOn = not TeamAimbotOn UI.TeamBtn.BackgroundColor3 = TeamAimbotOn and Color3.fromRGB(0,60,0) or Color3.fromRGB(10,10,10) end end end) print("Aimbot final cargado (GUI + lógica). Ajusta SMOOTH/MAX_DIST/FOV si quieres.")