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)