Pun Aimbot
Key RequiredUniversal

Pun Aimbot

Universal Scriptpun_pun405060pun_pun405060 149 views 114 executesUpdated Jul 27, 2026
Unrated
00
Lua Script•436 lines (16093 chars)
local WindUI = loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))()
local Players = game:GetService("Players")
local RS = game:GetService("RunService")
local Player = Players.LocalPlayer
local Camera = workspace.CurrentCamera

local State = { 
    AimEnabled = false, 
    AimFOV = 150, 
    LockHead = false, 
    LockClosest = false, 
    AimWallbang = false,
    ESPEnabled = false, 
    ESPThroughWalls = false,
    Language = "English"
}
local CurrentLock, TargetPart = nil, nil

-- คลังคำแปลภาษา (Translations Dictionary)
local Translations = {
    ["English"] = {
        WindowTitle = "Pun Aimbot",
        MainTab = "Main",
        AimbotSection = "Aimbot Controls",
        AimbotDesc = "Configure target lock-on properties and behaviors",
        AimbotToggle = "Aimbot",
        AimHead = "Aim Head*",
        AimClosest = "Aim Closest*",
        Wallbang = "Wallbang",
        FOVSection = "FOV Configuration",
        FOVDesc = "Adjust the active radius for locking onto targets",
        FOVSize = "FOV Size",
        ESPSection = "Visual ESP",
        ESPDesc = "Highlight players on viewport (Pure Red Drawing Line & Name)",
        ESPToggle = "ESP*",
        ThroughWalls = "Through Walls",
        SettingsTab = "Settings",
        ThemeSection = "Theme Settings",
        SelectTheme = "Select Theme",
        LangSection = "Language Settings",
        SelectLang = "Select Language"
    },
    ["Thai"] = {
        WindowTitle = "ปัน จุดมุ่งหมาย",
        MainTab = "หน้าหลัก",
        AimbotSection = "ระบบล็อกเป้า (Aimbot)",
        AimbotDesc = "ตั้งค่ารูปแบบและการทำงานของระบบล็อกเป้า",
        AimbotToggle = "เปิดใช้งาน Aimbot",
        AimHead = "ล็อกหัว*",
        AimClosest = "ล็อกจุดที่ใกล้ที่สุด*",
        Wallbang = "ล็อกทะลุกำแพง",
        FOVSection = "ตั้งค่า FOV",
        FOVDesc = "ปรับขนาดรัศมีขอบเขตการล็อกเป้า",
        FOVSize = "ขนาด FOV",
        ESPSection = "ระบบมองทะลุ (ESP)",
        ESPDesc = "แสดงกรอบและชื่อผู้เล่นด้วยเส้น Drawing สีแดง",
        ESPToggle = "เปิดใช้งาน ESP*",
        ThroughWalls = "แสดงผลทะลุกำแพง",
        SettingsTab = "ปรับแต่ง",
        ThemeSection = "ตั้งค่าธีม",
        SelectTheme = "เลือกธีม",
        LangSection = "ตั้งค่าภาษา",
        SelectLang = "เลือกภาษา"
    }
}

if Player.PlayerGui:FindFirstChild("AimbotFOV") then 
    Player.PlayerGui.AimbotFOV:Destroy() 
end

local fovGui = Instance.new("ScreenGui")
fovGui.Name = "AimbotFOV"
fovGui.IgnoreGuiInset = true
fovGui.DisplayOrder = 999
fovGui.ResetOnSpawn = false
fovGui.Parent = Player:WaitForChild("PlayerGui")

local circ = Instance.new("Frame", fovGui)
circ.AnchorPoint, circ.BackgroundTransparency, circ.Visible = Vector2.new(0.5, 0.5), 1, false
local stroke = Instance.new("UIStroke", circ)
stroke.Thickness = 1.5
stroke.Color = Color3.fromRGB(255, 255, 255)
Instance.new("UICorner", circ).CornerRadius = UDim.new(1, 0)

local function IsVisible(part, char)
    local rayParams = RaycastParams.new()
    rayParams.FilterDescendantsInstances = {Player.Character, char, Camera}
    rayParams.FilterType = Enum.RaycastFilterType.Exclude
    return workspace:Raycast(Camera.CFrame.Position, (part.Position - Camera.CFrame.Position).Unit * (part.Position - Camera.CFrame.Position).Magnitude, rayParams) == nil
end

local function GetAimbotTarget()
    if not State.AimEnabled then return nil, nil end
    local targetPlr, targetPart, close = nil, nil, State.AimFOV
    local mid = Vector2.new(Camera.ViewportSize.X/2, Camera.ViewportSize.Y/2)

    for _, v in pairs(Players:GetPlayers()) do
        if v ~= Player and v.Character and v.Character:FindFirstChild("Humanoid") and v.Character.Humanoid.Health > 0 then
            local head = v.Character:FindFirstChild("Head")
            local fallbackPart = head or v.Character:FindFirstChild("HumanoidRootPart") or v.Character:FindFirstChildWhichIsA("BasePart")
            
            if fallbackPart then
                local canAim = State.AimWallbang or IsVisible(fallbackPart, v.Character)
                
                if canAim then
                    if State.LockHead and head then
                        local p, vis = Camera:WorldToViewportPoint(head.Position)
                        if vis and (Vector2.new(p.X, p.Y) - mid).Magnitude < close then
                            close, targetPlr, targetPart = (Vector2.new(p.X, p.Y) - mid).Magnitude, v, head
                        end
                    elseif State.LockClosest then
                        for _, part in pairs(v.Character:GetChildren()) do
                            if part:IsA("BasePart") and (State.AimWallbang or IsVisible(part, v.Character)) then
                                local p, vis = Camera:WorldToViewportPoint(part.Position)
                                if vis and (Vector2.new(p.X, p.Y) - mid).Magnitude < close then
                                    close, targetPlr, targetPart = (Vector2.new(p.X, p.Y) - mid).Magnitude, v, part
                                end
                            end
                        end
                    end
                end
            end
        end
    end
    return targetPlr, targetPart
end

local function NewLine(color, thickness)
    local line = Drawing.new("Line")
    line.Visible = false
    line.From = Vector2.new(0, 0)
    line.To = Vector2.new(0, 0)
    line.Color = color
    line.Thickness = thickness
    line.Transparency = 1
    return line
end

local function CreateDrawingESP(plr)
    if plr == Player then return end
    
    local Library = {
        TL1 = NewLine(Color3.fromRGB(255, 0, 0), 2),
        TL2 = NewLine(Color3.fromRGB(255, 0, 0), 2),
        TR1 = NewLine(Color3.fromRGB(255, 0, 0), 2),
        TR2 = NewLine(Color3.fromRGB(255, 0, 0), 2),
        BL1 = NewLine(Color3.fromRGB(255, 0, 0), 2),
        BL2 = NewLine(Color3.fromRGB(255, 0, 0), 2),
        BR1 = NewLine(Color3.fromRGB(255, 0, 0), 2),
        BR2 = NewLine(Color3.fromRGB(255, 0, 0), 2),
        NameTag = Drawing.new("Text")
    }
    
    Library.NameTag.Visible = false
    Library.NameTag.Center = true
    Library.NameTag.Outline = true
    Library.NameTag.OutlineColor = Color3.fromRGB(0, 0, 0)
    Library.NameTag.Color = Color3.fromRGB(255, 0, 0)
    Library.NameTag.Size = 13
    Library.NameTag.Font = 2
    
    local oripart = Instance.new("Part")
    oripart.Parent = workspace
    oripart.Transparency = 1
    oripart.CanCollide = false
    oripart.Size = Vector3.new(1, 1, 1)
    oripart.Position = Vector3.new(0, 0, 0)
    
    local connection
    connection = RS.RenderStepped:Connect(function()
        local char = plr.Character
        if char and char:FindFirstChild("Humanoid") and char:FindFirstChild("HumanoidRootPart") and char.Humanoid.Health > 0 and char:FindFirstChild("Head") then
            
            local isTargetVisible = IsVisible(char.Head, char)
            local shouldShow = State.ESPEnabled and (State.ESPThroughWalls or isTargetVisible)
            
            local HumPos, vis = Camera:WorldToViewportPoint(char.HumanoidRootPart.Position)
            
            if shouldShow and vis then
                oripart.Size = Vector3.new(char.HumanoidRootPart.Size.X, char.HumanoidRootPart.Size.Y * 1.5, char.HumanoidRootPart.Size.Z)
                oripart.CFrame = CFrame.new(char.HumanoidRootPart.CFrame.Position, Camera.CFrame.Position)
                
                local SizeX = oripart.Size.X
                local SizeY = oripart.Size.Y
                local TL = Camera:WorldToViewportPoint((oripart.CFrame * CFrame.new(SizeX, SizeY, 0)).Position)
                local TR = Camera:WorldToViewportPoint((oripart.CFrame * CFrame.new(-SizeX, SizeY, 0)).Position)
                local BL = Camera:WorldToViewportPoint((oripart.CFrame * CFrame.new(SizeX, -SizeY, 0)).Position)
                local BR = Camera:WorldToViewportPoint((oripart.CFrame * CFrame.new(-SizeX, -SizeY, 0)).Position)
                
                local dist = (Player.Character and Player.Character:FindFirstChild("HumanoidRootPart") and (Player.Character.HumanoidRootPart.Position - oripart.Position).Magnitude) or 100
                local thicknessValue = math.clamp(1 / dist * 100, 1, 3)
                
                local ratio = (Camera.CFrame.Position - char.HumanoidRootPart.Position).Magnitude
                local offset = math.clamp(1 / ratio * 750, 2, 300)
                
                Library.TL1.From = Vector2.new(TL.X, TL.Y)
                Library.TL1.To = Vector2.new(TL.X + offset, TL.Y)
                Library.TL2.From = Vector2.new(TL.X, TL.Y)
                Library.TL2.To = Vector2.new(TL.X, TL.Y + offset)

                Library.TR1.From = Vector2.new(TR.X, TR.Y)
                Library.TR1.To = Vector2.new(TR.X - offset, TR.Y)
                Library.TR2.From = Vector2.new(TR.X, TR.Y)
                Library.TR2.To = Vector2.new(TR.X, TR.Y + offset)

                Library.BL1.From = Vector2.new(BL.X, BL.Y)
                Library.BL1.To = Vector2.new(BL.X + offset, BL.Y)
                Library.BL2.From = Vector2.new(BL.X, BL.Y)
                Library.BL2.To = Vector2.new(BL.X, BL.Y - offset)

                Library.BR1.From = Vector2.new(BR.X, BR.Y)
                Library.BR1.To = Vector2.new(BR.X - offset, BR.Y)
                Library.BR2.From = Vector2.new(BR.X, BR.Y)
                Library.BR2.To = Vector2.new(BR.X, BR.Y - offset)
                
                local headPos, headOnScreen = Camera:WorldToViewportPoint(char.Head.Position + Vector3.new(0, 2, 0))
                if headOnScreen then
                    Library.NameTag.Position = Vector2.new(headPos.X, headPos.Y - 15)
                    Library.NameTag.Text = plr.Name
                    Library.NameTag.Visible = true
                else
                    Library.NameTag.Visible = false
                end
                
                for i, v in pairs(Library) do
                    if v ~= Library.NameTag then
                        v.Thickness = thicknessValue
                        v.Visible = true
                    end
                end
            else
                for i, v in pairs(Library) do
                    v.Visible = false
                end
            end
        else
            for i, v in pairs(Library) do
                v.Visible = false
            end
            
            if not Players:FindFirstChild(plr.Name) then
                for i, v in pairs(Library) do
                    v:Remove()
                end
                if oripart then oripart:Destroy() end
                connection:Disconnect()
            end
        end
    end)
end

-- สร้าง UI Window
local Window = WindUI:CreateWindow({
    Title = Translations["English"].WindowTitle,
    Icon = "solar:target-line-duotone",
    Author = "Pun",
    Theme = "Violet"
})

-- หน้าหลัก (Main Tab)
local MainTab = Window:Tab({ 
    Title = Translations["English"].MainTab, 
    Icon = "solar:radar-2-line-duotone" 
})

local AimbotSec = MainTab:Section({ 
    Title = Translations["English"].AimbotSection, 
    Desc = Translations["English"].AimbotDesc 
})

local Row1 = MainTab:HStack()
local ToggleAim = Row1:Toggle({ 
    Title = Translations["English"].AimbotToggle, 
    Value = State.AimEnabled, 
    Callback = function(v) State.AimEnabled = v end 
})

local Row2 = MainTab:HStack()
local ToggleHead, ToggleClosest

ToggleHead = Row2:Toggle({ 
    Title = Translations["English"].AimHead, 
    Value = State.LockHead, 
    Callback = function(v) 
        State.LockHead = v 
        if v then 
            State.LockClosest = false 
            if ToggleClosest then ToggleClosest:SetValue(false) end
        end 
    end 
})

ToggleClosest = Row2:Toggle({ 
    Title = Translations["English"].AimClosest, 
    Value = State.LockClosest, 
    Callback = function(v) 
        State.LockClosest = v 
        if v then 
            State.LockHead = false 
            if ToggleHead then ToggleHead:SetValue(false) end
        end 
    end 
})

local RowAimbotPlugin = MainTab:HStack()
local ToggleWallbang = RowAimbotPlugin:Toggle({ 
    Title = Translations["English"].Wallbang, 
    Value = State.AimWallbang, 
    Callback = function(v) State.AimWallbang = v end 
})

local FOVSec = MainTab:Section({ 
    Title = Translations["English"].FOVSection, 
    Desc = Translations["English"].FOVDesc 
})

local SliderFOV = MainTab:Slider({ 
    Title = Translations["English"].FOVSize, 
    Step = 1, 
    Value = { Min = 10, Max = 800, Default = State.AimFOV }, 
    Callback = function(v) State.AimFOV = v end 
})

local ESPSec = MainTab:Section({ 
    Title = Translations["English"].ESPSection, 
    Desc = Translations["English"].ESPDesc 
})

local Row3 = MainTab:HStack()
local ToggleESP = Row3:Toggle({ 
    Title = Translations["English"].ESPToggle, 
    Value = State.ESPEnabled, 
    Callback = function(v) State.ESPEnabled = v end 
})

local RowESPPlugin = MainTab:HStack()
local ToggleThroughWalls = RowESPPlugin:Toggle({ 
    Title = Translations["English"].ThroughWalls, 
    Value = State.ESPThroughWalls, 
    Callback = function(v) State.ESPThroughWalls = v end 
})

-- แถบปรับแต่ง (Settings Tab)
local SettingsTab = Window:Tab({
    Title = Translations["English"].SettingsTab,
    Icon = "solar:settings-bold-duotone"
})

local ThemeSec = SettingsTab:Section({
    Title = Translations["English"].ThemeSection
})

local ThemeDropdown = SettingsTab:Dropdown({
    Title = Translations["English"].SelectTheme,
    Values = {
        "Light", "Dark", "Rose", "Plant", "Red", "Indigo", 
        "Sky", "Violet", "Amber", "Emerald", "Midnight", 
        "Crimson", "MonakaiPro", "CottonCandy", "Mellowsi", "Rainbow"
    },
    Value = "Violet",
    Callback = function(selected)
        WindUI:SetTheme(selected)
    end
})

local LangSec = SettingsTab:Section({
    Title = Translations["English"].LangSection
})

-- ฟังก์ชันสำหรับอัปเดตข้อความบน UI เมื่อสลับภาษา
local function UpdateText(elem, title, desc)
    if not elem then return end
    pcall(function()
        if title and typeof(elem.SetTitle) == "function" then elem:SetTitle(title) end
        if desc and typeof(elem.SetDesc) == "function" then elem:SetDesc(desc) end
    end)
end

local function ApplyLanguage(lang)
    State.Language = lang
    local t = Translations[lang] or Translations["English"]
    
    UpdateText(MainTab, t.MainTab)
    UpdateText(AimbotSec, t.AimbotSection, t.AimbotDesc)
    UpdateText(ToggleAim, t.AimbotToggle)
    UpdateText(ToggleHead, t.AimHead)
    UpdateText(ToggleClosest, t.AimClosest)
    UpdateText(ToggleWallbang, t.Wallbang)
    
    UpdateText(FOVSec, t.FOVSection, t.FOVDesc)
    UpdateText(SliderFOV, t.FOVSize)
    
    UpdateText(ESPSec, t.ESPSection, t.ESPDesc)
    UpdateText(ToggleESP, t.ESPToggle)
    UpdateText(ToggleThroughWalls, t.ThroughWalls)
    
    UpdateText(SettingsTab, t.SettingsTab)
    UpdateText(ThemeSec, t.ThemeSection)
    UpdateText(ThemeDropdown, t.SelectTheme)
    UpdateText(LangSec, t.LangSection)
    if LangDropdown then UpdateText(LangDropdown, t.SelectLang) end
end

local LangDropdown = SettingsTab:Dropdown({
    Title = Translations["English"].SelectLang,
    Values = { "English", "Thai" },
    Value = "English",
    Callback = function(selected)
        ApplyLanguage(selected)
    end
})

-- เริ่มต้นระบบตรวจจับผู้เล่น
for _, p in pairs(Players:GetPlayers()) do 
    CreateDrawingESP(p) 
end

Players.PlayerAdded:Connect(function(newplr)
    CreateDrawingESP(newplr)
end)

-- ลูปการทำงานควบคุมระบบล็อกเป้า
RS.RenderStepped:Connect(function()
    local mid = Vector2.new(Camera.ViewportSize.X/2, Camera.ViewportSize.Y/2)
    CurrentLock, TargetPart = GetAimbotTarget()
    
    circ.Visible = State.AimEnabled
    if circ.Visible then
        circ.Size = UDim2.fromOffset(State.AimFOV * 2, State.AimFOV * 2)
        circ.Position = UDim2.fromOffset(mid.X, mid.Y)
    end
    
    if State.AimEnabled and CurrentLock and TargetPart then 
        Camera.CFrame = CFrame.new(Camera.CFrame.Position, TargetPart.Position) 
    end
end)

Features & Information

- aimbot and aimbot plugin - esp and esp plugin

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts