Aimbot Script V3
Key RequiredUniversal

Aimbot Script V3

Universal ScriptVeldranVeldran 2.1K views 1.6K executesUpdated Dec 24, 2025
5.0/ 5(2 votes)
20100% Positive
Lua Script•430 lines (13682 chars)
-- 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.")

Features & Information

HOLA, finalmente esta Disponible la versión final de mi Script Aimbot, El NPC Aimbot no funciona, El resto si, Me gustaría mucho que fuesen a seguirme a mi cuenta de Roblox 123diegoghghgjgh
#Aimbot#V

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts