
KeylessUniversal

-- AIMBOT MEJORADO (LocalScript)
-- Pegar en StarterPlayer -> StarterPlayerScripts
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UIS = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera
-- ======================
-- CONFIGURACIÓN (ajusta si quieres)
-- ======================
local SMOOTHNESS = 0.18 -- 0..1, menor = más directo; 0.18 es suave pero rápido
local MAX_TARGET_DIST = 1000 -- distancia máxima para considerar objetivos
local AIM_PART_DEFAULT = "Head" -- parte por defecto
-- ======================
-- ESTADO
-- ======================
local AimbotEnabled = false
local TeamAimbotEnabled = false
local NPCAimbotEnabled = false
local TargetPartName = AIM_PART_DEFAULT
local SelectedPlayer = nil -- override por lista (Player)
local CurrentTargetModel = nil -- model (player.Character o modelo NPC)
-- ======================
-- UTIL: chequear vida
-- ======================
local function isModelAlive(model)
if not model or not model:IsA("Model") then return false end
local humanoid = model:FindFirstChildWhichIsA("Humanoid")
if not humanoid then return false end
if humanoid.Health and humanoid.Health > 0 then return true end
return false
end
-- ======================
-- UTIL: obtener parte objetivo
-- ======================
local function getPartForModel(model, partName)
if not model then return nil end
-- intentos mapeo
local candidates = {partName}
-- añadimos nombres comunes
if partName == "Torso" then
candidates = {"Torso","UpperTorso","LowerTorso","HumanoidRootPart"}
elseif partName == "HumanoidRootPart" then
candidates = {"HumanoidRootPart"}
elseif partName == "Head" then
candidates = {"Head"}
end
for _,name in ipairs(candidates) do
local p = model:FindFirstChild(name)
if p and p:IsA("BasePart") then return p end
end
-- fallback
for _,fallback in ipairs({"Head","HumanoidRootPart","UpperTorso","Torso"}) do
local p = model:FindFirstChild(fallback)
if p and p:IsA("BasePart") then return p end
end
return nil
end
-- ======================
-- BUSCADORES DE TARGETS
-- ======================
-- jugador enemigo más cercano (respeta TeamAimbot flag cuando se llame)
local function getClosestPlayer(filterEnemiesOnly)
local best, bestDist = nil, math.huge
local camPos = Camera.CFrame.Position
for _,pl in ipairs(Players:GetPlayers()) do
if pl ~= LocalPlayer and pl.Character and isModelAlive(pl.Character) then
-- si se requiere solo enemigos, ignorar aliados
if filterEnemiesOnly and pl.Team == LocalPlayer.Team then
-- ignorar
else
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_TARGET_DIST then
best, bestDist = pl, d
end
end
end
end
end
return best -- retorna Player o nil
end
-- NPC más cercano (modelo con Humanoid, no asociado a Players)
local function getClosestNPC()
local best, bestDist = nil, math.huge
local camPos = Camera.CFrame.Position
-- Si tienes una carpeta con NPCs (recomendado), cámbialo para iterar esa carpeta en vez de workspace:GetChildren()
for _,obj in ipairs(workspace: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 and hum.Health > 0 then
local d = (hrp.Position - camPos).Magnitude
if d < bestDist and d <= MAX_TARGET_DIST then
best, bestDist = obj, d
end
end
end
end
return best -- Model or nil
end
-- resolver objetivo final (prioridad: SelectedPlayer override, NPC if NPCAimbot on, team/enemy logic, fallback to any player)
local function resolveTargetModel()
-- 1) Si hay selección manual y sigue viva -> usarla
if SelectedPlayer and SelectedPlayer.Character and isModelAlive(SelectedPlayer.Character) then
return SelectedPlayer.Character
end
-- 2) Si NPC AIMBOT está ON -> priorizar NPCs vivos cercanos
if NPCAimbotEnabled then
local npc = getClosestNPC()
if npc then return npc end
end
-- 3) Si TeamAimbot ON -> encontrar enemigo más cercano
if TeamAimbotEnabled then
local enemyPlayer = getClosestPlayer(true)
if enemyPlayer and enemyPlayer.Character and isModelAlive(enemyPlayer.Character) then
return enemyPlayer.Character
end
end
-- 4) Si TeamAimbot OFF -> buscar cualquier jugador vivo más cercano (FFA)
local anyPlayer = getClosestPlayer(false)
if anyPlayer and anyPlayer.Character and isModelAlive(anyPlayer.Character) then
return anyPlayer.Character
end
-- 5) fallback: si no hay jugadores vivos, buscar NPC como extremo
local fallbackNPC = getClosestNPC()
if fallbackNPC then return fallbackNPC end
return nil
end
-- ======================
-- GUI (neón) + LISTA con show/hide + selección
-- ======================
local function createNeonGUI()
local playerGui = LocalPlayer:WaitForChild("PlayerGui")
local screen = Instance.new("ScreenGui")
screen.Name = "AimbotNeonGUI"
screen.ResetOnSpawn = false
screen.Parent = playerGui
-- OPEN button (top-right)
local openBtn = Instance.new("TextButton")
openBtn.Name = "OpenBtn"
openBtn.Parent = screen
openBtn.Size = UDim2.new(0,120,0,44)
openBtn.Position = UDim2.new(0.85, 0, 0.03, 0)
openBtn.Text = "OPEN"
openBtn.BackgroundTransparency = 0
openBtn.BackgroundColor3 = Color3.fromRGB(12,12,12)
openBtn.TextColor3 = Color3.fromRGB(200,255,255)
openBtn.Font = Enum.Font.GothamBold
openBtn.TextSize = 18
openBtn.AutoButtonColor = true
-- neon style stroke + gradient
local stroke = Instance.new("UIStroke", openBtn)
stroke.Thickness = 2
stroke.Color = Color3.fromRGB(0, 255, 200)
local grad = Instance.new("UIGradient", openBtn)
grad.Color = ColorSequence.new({ColorSequenceKeypoint.new(0, Color3.fromRGB(0,120,255)), ColorSequenceKeypoint.new(1, Color3.fromRGB(0,255,200))})
-- MAIN FRAME (hidden by default)
local frame = Instance.new("Frame", screen)
frame.Name = "MainFrame"
frame.Size = UDim2.new(0, 360, 0, 460)
frame.Position = UDim2.new(0.55, 0, 0.12, 0)
frame.BackgroundColor3 = Color3.fromRGB(8,8,8)
frame.BorderSizePixel = 0
frame.Visible = false
-- neon top
local top = Instance.new("Frame", frame)
top.Size = UDim2.new(1,0,0,48)
top.Position = UDim2.new(0,0,0,0)
top.BackgroundColor3 = Color3.fromRGB(2,2,2)
local title = Instance.new("TextLabel", top)
title.Size = UDim2.new(0.8,0,1,0)
title.Position = UDim2.new(0.02,0,0,0)
title.BackgroundTransparency = 1
title.Text = "AIMBOT NEON"
title.TextColor3 = Color3.fromRGB(0,255,200)
title.Font = Enum.Font.GothamBlack
title.TextSize = 20
local closeX = Instance.new("TextButton", top)
closeX.Size = UDim2.new(0,36,0,36)
closeX.Position = UDim2.new(0.93,0,0.08,0)
closeX.Text = "X"
closeX.TextColor3 = Color3.fromRGB(255,255,255)
closeX.BackgroundColor3 = Color3.fromRGB(40,0,0)
-- Buttons area
local btnY = 0.12
local function makeBtn(text)
local b = Instance.new("TextButton", frame)
b.Size = UDim2.new(0.88,0,0,44)
b.Position = UDim2.new(0.06,0,btnY,0)
btnY = btnY + 0.12
b.Text = text
b.TextScaled = true
b.Font = Enum.Font.GothamBold
b.BackgroundColor3 = Color3.fromRGB(10,10,10)
b.TextColor3 = Color3.fromRGB(180,255,230)
local s = Instance.new("UIStroke", b)
s.Color = Color3.fromRGB(0,200,180)
s.Thickness = 1.6
return b
end
local lockBtn = makeBtn("LOCK (OFF)")
local teamBtn = makeBtn("TEAM AIMBOT (OFF)")
local npcBtn = makeBtn("NPC AIMBOT (OFF)")
-- Part input
local partBox = Instance.new("TextBox", frame)
partBox.Size = UDim2.new(0.88,0,0,34)
partBox.Position = UDim2.new(0.06,0,0.5,0)
partBox.PlaceholderText = "Parte objetivo (Head default)"
partBox.Text = ""
partBox.BackgroundColor3 = Color3.fromRGB(6,6,6)
partBox.TextColor3 = Color3.fromRGB(200,255,230)
-- List toggle button
local listToggle = Instance.new("TextButton", frame)
listToggle.Size = UDim2.new(0.88,0,0,36)
listToggle.Position = UDim2.new(0.06,0,0.58,0)
listToggle.Text = "Mostrar lista de jugadores"
listToggle.TextColor3 = Color3.fromRGB(200,255,230)
listToggle.BackgroundColor3 = Color3.fromRGB(10,10,10)
listToggle.Font = Enum.Font.GothamSemibold
-- Player list (compact) with scroll
local listFrame = Instance.new("Frame", frame)
listFrame.Size = UDim2.new(0.88,0,0,170)
listFrame.Position = UDim2.new(0.06,0,0.65,0)
listFrame.BackgroundColor3 = Color3.fromRGB(4,4,4)
listFrame.Visible = false
local scroll = Instance.new("ScrollingFrame", listFrame)
scroll.Size = UDim2.new(1,-8,1,-8)
scroll.Position = UDim2.new(0,4,0,4)
scroll.BackgroundTransparency = 1
scroll.CanvasSize = UDim2.new(0,0,0,0)
scroll.ScrollBarThickness = 8
local function populatePlayerList()
scroll:ClearAllChildren()
local y = 0
for _,pl in ipairs(Players:GetPlayers()) do
if pl ~= LocalPlayer then
local b = Instance.new("TextButton", scroll)
b.Size = UDim2.new(1,-10,0,30)
b.Position = UDim2.new(0,5,0,y)
b.Text = pl.Name
b.TextColor3 = Color3.fromRGB(200,255,230)
b.BackgroundColor3 = Color3.fromRGB(12,12,12)
b.Font = Enum.Font.Gotham
b.TextScaled = true
b.MouseButton1Click:Connect(function()
SelectedPlayer = pl
-- close list automatically
listFrame.Visible = false
listToggle.Text = "Mostrar lista de jugadores"
end)
y = y + 34
end
end
scroll.CanvasSize = UDim2.new(0,0,0, math.max(1,y))
end
-- EVENTS: wiring buttons
openBtn.MouseButton1Click:Connect(function()
frame.Visible = not frame.Visible
openBtn.Text = frame.Visible and "CLOSE" or "OPEN"
if frame.Visible then populatePlayerList() end
end)
closeX.MouseButton1Click:Connect(function()
frame.Visible = false
openBtn.Text = "OPEN"
end)
lockBtn.MouseButton1Click:Connect(function()
AimbotEnabled = not AimbotEnabled
lockBtn.Text = AimbotEnabled and "LOCK: ON" or "LOCK (OFF)"
end)
teamBtn.MouseButton1Click:Connect(function()
TeamAimbotEnabled = not TeamAimbotEnabled
teamBtn.Text = TeamAimbotEnabled and "TEAM: ON" or "TEAM AIMBOT (OFF)"
end)
npcBtn.MouseButton1Click:Connect(function()
NPCAimbotEnabled = not NPCAimbotEnabled
npcBtn.Text = NPCAimbotEnabled and "NPC: ON" or "NPC AIMBOT (OFF)"
end)
partBox.FocusLost:Connect(function()
if partBox.Text and partBox.Text ~= "" then
TargetPartName = partBox.Text
else
TargetPartName = AIM_PART_DEFAULT
end
end)
listToggle.MouseButton1Click:Connect(function()
listFrame.Visible = not listFrame.Visible
listToggle.Text = listFrame.Visible and "Ocultar lista de jugadores" or "Mostrar lista de jugadores"
if listFrame.Visible then populatePlayerList() end
end)
-- return UI references for debug if needed
return {
OpenBtn = openBtn,
Frame = frame,
Populate = populatePlayerList
}
end
-- crear GUI
local UI = createNeonGUI()
-- ======================
-- AIMBOT LOOP: apunta a modelo vivo; si muere, retargetea
-- ======================
RunService.RenderStepped:Connect(function(dt)
-- limpiar selectedPlayer si murió o desconectó
if SelectedPlayer and (not SelectedPlayer.Parent or not (SelectedPlayer.Character and isModelAlive(SelectedPlayer.Character))) then
SelectedPlayer = nil
end
if not AimbotEnabled then return end
-- resolver objetivo
local resolved = resolveTargetModel()
if not resolved then
CurrentTargetModel = nil
return
end
-- si resolved no está vivo, saltamos
if not isModelAlive(resolved) then
CurrentTargetModel = nil
return
end
-- obtener parte a mirar
local part = getPartForModel(resolved, TargetPartName)
if not part then return end
-- aplicar suavizado y apuntar (solo rotación)
local camPos = Camera.CFrame.Position
local desired = CFrame.new(camPos, part.Position)
local lerpAlpha = math.clamp(1 - SMOOTHNESS, 0, 1)
-- frame-rate independent lerp
local t = 1 - math.exp(- (1 - SMOOTHNESS) * 60 * dt)
local newCFrame = Camera.CFrame:Lerp(desired, t)
Camera.CFrame = CFrame.new(camPos, (newCFrame * CFrame.new(0,0,-1)).Position)
CurrentTargetModel = resolved
end)
-- ======================
-- ATajos teclado (F abrir, C toggle aimbot, T toggle team)
-- ======================
UIS.InputBegan:Connect(function(input, gp)
if gp then return end
if input.UserInputType == Enum.UserInputType.Keyboard then
if input.KeyCode == Enum.KeyCode.F then
if UI and UI.OpenBtn then UI.OpenBtn:Activate() end
elseif input.KeyCode == Enum.KeyCode.C then
AimbotEnabled = not AimbotEnabled
elseif input.KeyCode == Enum.KeyCode.T then
TeamAimbotEnabled = not TeamAimbotEnabled
end
end
end)
-- ======================
-- actualizar lista dinámicamente si entran/salen jugadores
-- ======================
Players.PlayerAdded:Connect(function() if UI and UI.Populate then UI.Populate() end end)
Players.PlayerRemoving:Connect(function()
if SelectedPlayer and not Players:FindFirstChild(SelectedPlayer.Name) then SelectedPlayer = nil end
if UI and UI.Populate then UI.Populate() end
end)
print("Aimbot mejorado cargado.")



a
Key