![[Open Source & Universal] Avatar Changer, Saver, Stealer](https://scriptblox.com/images/sb/0-1790383978808.png)
KeylessUniversal

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera
--credits by azure
local TOGGLE_KEY = Enum.KeyCode.Q
local enabled = false
local AimPart = "Head"
local Smoothness = 0.3
local FOV = 100
local ESP_CACHE = {}
local function IsEnemy(player)
return player.Team ~= LocalPlayer.Team
end
local function GetClosestEnemy()
local closest
local shortest = FOV
for _, plr in pairs(Players:GetPlayers()) do
if plr ~= LocalPlayer and IsEnemy(plr) and plr.Character and plr.Character:FindFirstChild(AimPart) then
local screenPos, onScreen = Camera:WorldToViewportPoint(plr.Character[AimPart].Position)
if onScreen then
local dist = (Vector2.new(screenPos.X, screenPos.Y) - Vector2.new(Camera.ViewportSize.X/2, Camera.ViewportSize.Y/2)).Magnitude
if dist < shortest then
closest = plr
shortest = dist
end
end
end
end
return closest
end
local function AimAt(part)
local dir = (part.Position - Camera.CFrame.Position).Unit
Camera.CFrame = CFrame.new(Camera.CFrame.Position, Camera.CFrame.Position + dir * Smoothness)
end
local function UpdateESP(plr)
if plr.Character then
local root = plr.Character:FindFirstChild("HumanoidRootPart") or plr.Character:FindFirstChild("Torso")
if root then
if not ESP_CACHE[plr] then
local billboard = Instance.new("BillboardGui")
billboard.Name = "SmallNameTag"
billboard.Adornee = root
billboard.Size = UDim2.new(0,80,0,20)
billboard.StudsOffset = Vector3.new(0,2.5,0)
billboard.AlwaysOnTop = true
billboard.Parent = root
local nameLabel = Instance.new("TextLabel")
nameLabel.Size = UDim2.new(1,0,1,0)
nameLabel.BackgroundTransparency = 1
nameLabel.Text = plr.Name
nameLabel.TextColor3 = plr.TeamColor.Color
nameLabel.TextScaled = true
nameLabel.Font = Enum.Font.SourceSansBold
nameLabel.Parent = billboard
ESP_CACHE[plr] = billboard
else
ESP_CACHE[plr].Adornee = root
ESP_CACHE[plr].Parent = root
end
end
end
end
local function RemoveESP(plr)
if ESP_CACHE[plr] then
ESP_CACHE[plr]:Destroy()
ESP_CACHE[plr] = nil
end
end
Players.PlayerAdded:Connect(function(plr)
plr.CharacterAdded:Connect(function()
UpdateESP(plr)
end)
end)
for _, plr in pairs(Players:GetPlayers()) do
plr.CharacterAdded:Connect(function()
UpdateESP(plr)
end)
end
UserInputService.InputBegan:Connect(function(input, gp)
if gp then return end
if input.KeyCode == TOGGLE_KEY then
enabled = not enabled
end
end)
RunService.RenderStepped:Connect(function()
for _, plr in pairs(Players:GetPlayers()) do
if plr ~= LocalPlayer and IsEnemy(plr) and plr.Character then
UpdateESP(plr)
else
RemoveESP(plr)
end
end
if enabled then
local target = GetClosestEnemy()
if target and target.Character then
AimAt(target.Character[AimPart])
end
end
end)![[Open Source & Universal] Avatar Changer, Saver, Stealer](https://scriptblox.com/images/sb/0-1790383978808.png)



mobile.?
@zxcv if you use keyboard script its gonna be work but aimbot its not support mobile yet just have esp for mobile