
KeylessUniversal

-- 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.")No comments yet for this script.



