local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local InsertService = game:GetService("InsertService") local player = Players.LocalPlayer local Camera = workspace.CurrentCamera local Settings = { Enabled = true, ESPType = "Highlight", Color = Color3.fromRGB(138, 43, 226), Rainbow = false, ShowNames = true, ShowHealth = true, HealthStyle = "Percent", ShowDistance = true, TrailEnabled = false, TrailType = "Classic", TrailSize = 1.0, -- Trail size multiplier ChinaHat = false, ChinaHatFriends = true, -- Show ONLY on friends ChinaHatSize = 1.0, -- Hat size multiplier TargetESP = false, Friends = {} -- Friend list } -- Skin presets local SkinPresets = { {name = "Reset", id = 0}, {name = "Neko-Bunny", id = 6822270792}, {name = "Girl", id = 8208615031}, {name = "Guest 666", id = 15680885383}, } local originalAppearance = nil -- Color presets (20 + Rainbow) local ColorPresets = { {name = "Purple", color = Color3.fromRGB(138, 43, 226)}, {name = "Red", color = Color3.fromRGB(255, 50, 50)}, {name = "Green", color = Color3.fromRGB(50, 255, 50)}, {name = "Blue", color = Color3.fromRGB(50, 150, 255)}, {name = "Cyan", color = Color3.fromRGB(0, 255, 255)}, {name = "Yellow", color = Color3.fromRGB(255, 255, 0)}, {name = "Orange", color = Color3.fromRGB(255, 150, 0)}, {name = "Pink", color = Color3.fromRGB(255, 100, 200)}, {name = "Magenta", color = Color3.fromRGB(255, 0, 255)}, {name = "Lime", color = Color3.fromRGB(150, 255, 0)}, {name = "Teal", color = Color3.fromRGB(0, 200, 200)}, {name = "Gold", color = Color3.fromRGB(255, 200, 50)}, {name = "Silver", color = Color3.fromRGB(200, 200, 200)}, {name = "White", color = Color3.fromRGB(255, 255, 255)}, {name = "Coral", color = Color3.fromRGB(255, 127, 80)}, {name = "Violet", color = Color3.fromRGB(200, 100, 255)}, {name = "Sky", color = Color3.fromRGB(135, 206, 235)}, {name = "Mint", color = Color3.fromRGB(150, 255, 200)}, {name = "Peach", color = Color3.fromRGB(255, 200, 180)}, {name = "Navy", color = Color3.fromRGB(50, 50, 150)}, } local colorIdx = 1 local ESPObjects = {} local myTrail = nil local chinaHats = {} local targetESPObj = nil local currentTarget = nil local targetRotation = 0 local friendListOpen = false -- Rainbow hue local rainbowHue = 0 -- Create main GUI local screenGui = Instance.new("ScreenGui") screenGui.Name = "VisualClient" screenGui.ResetOnSpawn = false screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling pcall(function() screenGui.Parent = game:GetService("CoreGui") end) if not screenGui.Parent then screenGui.Parent = player:WaitForChild("PlayerGui") end -- Main container local mainFrame = Instance.new("Frame") mainFrame.Name = "Main" mainFrame.Size = UDim2.new(0, 280, 0, 420) mainFrame.Position = UDim2.new(0.5, -140, 0.5, -210) mainFrame.BackgroundColor3 = Color3.fromRGB(15, 15, 20) mainFrame.BorderSizePixel = 0 mainFrame.Parent = screenGui local mainCorner = Instance.new("UICorner") mainCorner.CornerRadius = UDim.new(0, 16) mainCorner.Parent = mainFrame local mainStroke = Instance.new("UIStroke") mainStroke.Color = Color3.fromRGB(138, 43, 226) mainStroke.Thickness = 2 mainStroke.Parent = mainFrame -- Title with rainbow effect local titleLabel = Instance.new("TextLabel") titleLabel.Name = "Title" titleLabel.Text = "Visual Client" titleLabel.Font = Enum.Font.GothamBold titleLabel.TextSize = 22 titleLabel.TextColor3 = Color3.fromRGB(255, 100, 150) titleLabel.Size = UDim2.new(1, 0, 0, 50) titleLabel.Position = UDim2.new(0, 0, 0, 0) titleLabel.BackgroundTransparency = 1 titleLabel.Parent = mainFrame -- Minimize button local minimizeBtn = Instance.new("TextButton") minimizeBtn.Name = "Minimize" minimizeBtn.Text = "—" minimizeBtn.Font = Enum.Font.GothamBold minimizeBtn.TextSize = 20 minimizeBtn.TextColor3 = Color3.fromRGB(255, 255, 255) minimizeBtn.Size = UDim2.new(0, 40, 0, 40) minimizeBtn.Position = UDim2.new(1, -45, 0, 5) minimizeBtn.BackgroundColor3 = Color3.fromRGB(80, 80, 100) minimizeBtn.Parent = mainFrame Instance.new("UICorner", minimizeBtn).CornerRadius = UDim.new(0, 10) -- Content frame local contentFrame = Instance.new("Frame") contentFrame.Name = "Content" contentFrame.Size = UDim2.new(1, -20, 1, -60) contentFrame.Position = UDim2.new(0, 10, 0, 55) contentFrame.BackgroundTransparency = 1 contentFrame.Parent = mainFrame -- Scroll frame for mobile local scrollFrame = Instance.new("ScrollingFrame") scrollFrame.Name = "Scroll" scrollFrame.Size = UDim2.new(1, 0, 1, 0) scrollFrame.CanvasSize = UDim2.new(0, 0, 0, 500) scrollFrame.ScrollBarThickness = 4 scrollFrame.ScrollBarImageColor3 = Color3.fromRGB(138, 43, 226) scrollFrame.BackgroundTransparency = 1 scrollFrame.Parent = contentFrame local listLayout = Instance.new("UIListLayout") listLayout.SortOrder = Enum.SortOrder.LayoutOrder listLayout.Padding = UDim.new(0, 8) listLayout.Parent = scrollFrame -- Helper: Create toggle button local function createToggle(name, default, callback, order) local frame = Instance.new("Frame") frame.Name = name frame.Size = UDim2.new(1, -10, 0, 45) frame.BackgroundColor3 = Color3.fromRGB(25, 25, 35) frame.LayoutOrder = order frame.Parent = scrollFrame Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 10) local label = Instance.new("TextLabel") label.Text = name label.Font = Enum.Font.Gotham label.TextSize = 14 label.TextColor3 = Color3.fromRGB(220, 220, 220) label.Size = UDim2.new(0.6, 0, 1, 0) label.Position = UDim2.new(0, 12, 0, 0) label.BackgroundTransparency = 1 label.TextXAlignment = Enum.TextXAlignment.Left label.Parent = frame local btn = Instance.new("TextButton") btn.Text = default and "ON" or "OFF" btn.Font = Enum.Font.GothamBold btn.TextSize = 13 btn.TextColor3 = default and Color3.fromRGB(80, 255, 80) or Color3.fromRGB(255, 80, 80) btn.Size = UDim2.new(0, 60, 0, 30) btn.Position = UDim2.new(1, -70, 0.5, -15) btn.BackgroundColor3 = default and Color3.fromRGB(30, 60, 30) or Color3.fromRGB(60, 30, 30) btn.Parent = frame Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 8) local state = default btn.MouseButton1Click:Connect(function() state = not state btn.Text = state and "ON" or "OFF" btn.TextColor3 = state and Color3.fromRGB(80, 255, 80) or Color3.fromRGB(255, 80, 80) btn.BackgroundColor3 = state and Color3.fromRGB(30, 60, 30) or Color3.fromRGB(60, 30, 30) callback(state) end) return frame, btn end -- Helper: Create selector button local function createSelector(name, options, default, callback, order) local frame = Instance.new("Frame") frame.Name = name frame.Size = UDim2.new(1, -10, 0, 45) frame.BackgroundColor3 = Color3.fromRGB(25, 25, 35) frame.LayoutOrder = order frame.Parent = scrollFrame Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 10) local label = Instance.new("TextLabel") label.Text = name label.Font = Enum.Font.Gotham label.TextSize = 14 label.TextColor3 = Color3.fromRGB(220, 220, 220) label.Size = UDim2.new(0.4, 0, 1, 0) label.Position = UDim2.new(0, 12, 0, 0) label.BackgroundTransparency = 1 label.TextXAlignment = Enum.TextXAlignment.Left label.Parent = frame local idx = 1 for i, v in ipairs(options) do if v == default then idx = i break end end local btn = Instance.new("TextButton") btn.Text = "< " .. default .. " >" btn.Font = Enum.Font.Gotham btn.TextSize = 12 btn.TextColor3 = Color3.fromRGB(255, 255, 255) btn.Size = UDim2.new(0, 110, 0, 30) btn.Position = UDim2.new(1, -120, 0.5, -15) btn.BackgroundColor3 = Color3.fromRGB(50, 50, 70) btn.Parent = frame Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 8) btn.MouseButton1Click:Connect(function() idx = idx % #options + 1 btn.Text = "< " .. options[idx] .. " >" callback(options[idx]) end) return frame, btn end -- Create UI elements createToggle("ESP Enabled", true, function(v) Settings.Enabled = v end, 1) createSelector("ESP Type", {"2D Box", "3D Box", "Chams", "Soul", "Soul V2", "Stars", "Highlight"}, "Highlight", function(v) Settings.ESPType = v -- Clear old visuals when type changes for plr, esp in pairs(ESPObjects) do if esp.highlight then esp.highlight.Enabled = false end if plr.Character then local box = plr.Character:FindFirstChild("RatmirBox") local box3d = plr.Character:FindFirstChild("Ratmir3DBox") if box then box:Destroy() end if box3d then box3d:Destroy() end end end end, 2) -- Color selector local colorFrame = Instance.new("Frame") colorFrame.Name = "ColorSelect" colorFrame.Size = UDim2.new(1, -10, 0, 45) colorFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 35) colorFrame.LayoutOrder = 3 colorFrame.Parent = scrollFrame Instance.new("UICorner", colorFrame).CornerRadius = UDim.new(0, 10) local colorLabel = Instance.new("TextLabel") colorLabel.Text = "Visuals" colorLabel.Font = Enum.Font.Gotham colorLabel.TextSize = 14 colorLabel.TextColor3 = Color3.fromRGB(220, 220, 220) colorLabel.Size = UDim2.new(0.3, 0, 1, 0) colorLabel.Position = UDim2.new(0, 12, 0, 0) colorLabel.BackgroundTransparency = 1 colorLabel.TextXAlignment = Enum.TextXAlignment.Left colorLabel.Parent = colorFrame local colorPreview = Instance.new("Frame") colorPreview.Size = UDim2.new(0, 25, 0, 25) colorPreview.Position = UDim2.new(0, 70, 0.5, -12) colorPreview.BackgroundColor3 = Settings.Color colorPreview.Parent = colorFrame Instance.new("UICorner", colorPreview).CornerRadius = UDim.new(0, 6) local colorBtn = Instance.new("TextButton") colorBtn.Text = "< Purple >" colorBtn.Font = Enum.Font.Gotham colorBtn.TextSize = 11 colorBtn.TextColor3 = Color3.fromRGB(255, 255, 255) colorBtn.Size = UDim2.new(0, 100, 0, 30) colorBtn.Position = UDim2.new(1, -110, 0.5, -15) colorBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 70) colorBtn.Parent = colorFrame Instance.new("UICorner", colorBtn).CornerRadius = UDim.new(0, 8) colorBtn.MouseButton1Click:Connect(function() colorIdx = colorIdx % (#ColorPresets + 1) + 1 if colorIdx > #ColorPresets then Settings.Rainbow = true colorBtn.Text = "< Rainbow >" colorPreview.BackgroundColor3 = Color3.fromHSV(rainbowHue, 1, 1) else Settings.Rainbow = false Settings.Color = ColorPresets[colorIdx].color colorBtn.Text = "< " .. ColorPresets[colorIdx].name .. " >" colorPreview.BackgroundColor3 = Settings.Color end end) createToggle("Show Names", true, function(v) Settings.ShowNames = v end, 4) createToggle("Show Health", true, function(v) Settings.ShowHealth = v end, 5) createSelector("Health Style", {"Percent", "Numbers"}, "Percent", function(v) Settings.HealthStyle = v end, 6) createToggle("Show Distance", true, function(v) Settings.ShowDistance = v end, 7) createToggle("Trail", false, function(v) Settings.TrailEnabled = v if not v and myTrail then myTrail:Destroy() myTrail = nil end end, 8) createSelector("Trail Type", {"Ghost", "Classic", "Stars", "Lightning", "Hearts", "Sparkle"}, "Ghost", function(v) Settings.TrailType = v if myTrail then myTrail:Destroy() myTrail = nil end end, 9) -- Trail Size selector createSelector("Trail Size", {"Small", "Normal", "Large"}, "Normal", function(v) if v == "Small" then Settings.TrailSize = 0.6 elseif v == "Normal" then Settings.TrailSize = 1.0 else Settings.TrailSize = 1.5 end end, 10) -- China Hat toggle createToggle("China Hat", false, function(v) Settings.ChinaHat = v if not v then for _, hat in pairs(chinaHats) do if hat then hat:Destroy() end end chinaHats = {} end end, 11) createToggle("Friends Only Hat", true, function(v) Settings.ChinaHatFriends = v end, 12) -- Hat Size selector createSelector("Hat Size", {"Small", "Normal", "Large"}, "Normal", function(v) if v == "Small" then Settings.ChinaHatSize = 0.6 elseif v == "Normal" then Settings.ChinaHatSize = 1.0 else Settings.ChinaHatSize = 1.5 end -- Recreate hats with new size for _, hat in pairs(chinaHats) do if hat then hat:Destroy() end end chinaHats = {} end, 13) -- Target ESP toggle createToggle("Target ESP", false, function(v) Settings.TargetESP = v if not v and targetESPObj then targetESPObj:Destroy() targetESPObj = nil currentTarget = nil end end, 14) -- Friends List Button local friendsFrame = Instance.new("Frame") friendsFrame.Name = "FriendsBtn" friendsFrame.Size = UDim2.new(1, -10, 0, 45) friendsFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 35) friendsFrame.LayoutOrder = 15 friendsFrame.Parent = scrollFrame Instance.new("UICorner", friendsFrame).CornerRadius = UDim.new(0, 10) local friendsLabel = Instance.new("TextLabel") friendsLabel.Text = "Friends" friendsLabel.Font = Enum.Font.Gotham friendsLabel.TextSize = 14 friendsLabel.TextColor3 = Color3.fromRGB(220, 220, 220) friendsLabel.Size = UDim2.new(0.5, 0, 1, 0) friendsLabel.Position = UDim2.new(0, 12, 0, 0) friendsLabel.BackgroundTransparency = 1 friendsLabel.TextXAlignment = Enum.TextXAlignment.Left friendsLabel.Parent = friendsFrame local friendsBtn = Instance.new("TextButton") friendsBtn.Text = "Open List" friendsBtn.Font = Enum.Font.GothamBold friendsBtn.TextSize = 11 friendsBtn.TextColor3 = Color3.fromRGB(255, 255, 255) friendsBtn.Size = UDim2.new(0, 80, 0, 30) friendsBtn.Position = UDim2.new(1, -90, 0.5, -15) friendsBtn.BackgroundColor3 = Color3.fromRGB(60, 50, 80) friendsBtn.Parent = friendsFrame Instance.new("UICorner", friendsBtn).CornerRadius = UDim.new(0, 8) -- Friends List Panel local friendsPanel = Instance.new("Frame") friendsPanel.Name = "FriendsPanel" friendsPanel.Size = UDim2.new(0, 220, 0, 280) friendsPanel.Position = UDim2.new(0.5, -110, 0.5, -140) friendsPanel.BackgroundColor3 = Color3.fromRGB(20, 20, 28) friendsPanel.Visible = false friendsPanel.Parent = screenGui Instance.new("UICorner", friendsPanel).CornerRadius = UDim.new(0, 12) local fpStroke = Instance.new("UIStroke", friendsPanel) fpStroke.Color = Color3.fromRGB(138, 43, 226) fpStroke.Thickness = 2 local fpTitle = Instance.new("TextLabel", friendsPanel) fpTitle.Text = "Friends List [drag]" fpTitle.Font = Enum.Font.GothamBold fpTitle.TextSize = 14 fpTitle.TextColor3 = Color3.fromRGB(255, 150, 200) fpTitle.Size = UDim2.new(1, 0, 0, 35) fpTitle.BackgroundTransparency = 1 local fpClose = Instance.new("TextButton", friendsPanel) fpClose.Text = "X" fpClose.Font = Enum.Font.GothamBold fpClose.TextSize = 14 fpClose.TextColor3 = Color3.fromRGB(255, 255, 255) fpClose.Size = UDim2.new(0, 30, 0, 30) fpClose.Position = UDim2.new(1, -33, 0, 3) fpClose.BackgroundColor3 = Color3.fromRGB(150, 50, 50) Instance.new("UICorner", fpClose).CornerRadius = UDim.new(0, 8) fpClose.MouseButton1Click:Connect(function() friendsPanel.Visible = false friendListOpen = false end) local fpScroll = Instance.new("ScrollingFrame", friendsPanel) fpScroll.Size = UDim2.new(1, -16, 1, -45) fpScroll.Position = UDim2.new(0, 8, 0, 40) fpScroll.BackgroundTransparency = 1 fpScroll.ScrollBarThickness = 3 fpScroll.ScrollBarImageColor3 = Color3.fromRGB(138, 43, 226) fpScroll.CanvasSize = UDim2.new(0, 0, 0, 0) local fpLayout = Instance.new("UIListLayout", fpScroll) fpLayout.SortOrder = Enum.SortOrder.LayoutOrder fpLayout.Padding = UDim.new(0, 4) -- Dragging for friends panel (fixed) local fpDragging, fpDragStart, fpStartPos = false, nil, nil fpTitle.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then fpDragging = true fpDragStart = input.Position fpStartPos = friendsPanel.Position end end) fpTitle.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then fpDragging = false end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then fpDragging = false end end) UserInputService.InputChanged:Connect(function(input) if fpDragging and (input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseMovement) then local delta = input.Position - fpDragStart friendsPanel.Position = UDim2.new(fpStartPos.X.Scale, fpStartPos.X.Offset + delta.X, fpStartPos.Y.Scale, fpStartPos.Y.Offset + delta.Y) end end) local function updateFriendsList() for _, c in pairs(fpScroll:GetChildren()) do if c:IsA("Frame") then c:Destroy() end end local order = 0 for _, plr in pairs(Players:GetPlayers()) do if plr ~= player then order = order + 1 local isFriend = Settings.Friends[plr.Name] or false local pf = Instance.new("Frame") pf.Size = UDim2.new(1, -6, 0, 40) pf.BackgroundColor3 = isFriend and Color3.fromRGB(40, 50, 40) or Color3.fromRGB(30, 30, 38) pf.LayoutOrder = order pf.Parent = fpScroll Instance.new("UICorner", pf).CornerRadius = UDim.new(0, 8) -- Avatar local avatar = Instance.new("ImageLabel", pf) avatar.Size = UDim2.new(0, 32, 0, 32) avatar.Position = UDim2.new(0, 4, 0.5, -16) avatar.BackgroundColor3 = Color3.fromRGB(50, 50, 60) Instance.new("UICorner", avatar).CornerRadius = UDim.new(0, 6) pcall(function() avatar.Image = Players:GetUserThumbnailAsync(plr.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size48x48) end) -- Name local nm = Instance.new("TextLabel", pf) nm.Text = plr.Name nm.Font = Enum.Font.Gotham nm.TextSize = 11 nm.TextColor3 = Color3.fromRGB(220, 220, 220) nm.Size = UDim2.new(0, 90, 1, 0) nm.Position = UDim2.new(0, 40, 0, 0) nm.BackgroundTransparency = 1 nm.TextXAlignment = Enum.TextXAlignment.Left nm.TextTruncate = Enum.TextTruncate.AtEnd -- Toggle button local tb = Instance.new("TextButton", pf) tb.Text = isFriend and "Friend" or "Add" tb.Font = Enum.Font.GothamBold tb.TextSize = 10 tb.TextColor3 = isFriend and Color3.fromRGB(100, 255, 100) or Color3.fromRGB(200, 200, 200) tb.Size = UDim2.new(0, 50, 0, 26) tb.Position = UDim2.new(1, -55, 0.5, -13) tb.BackgroundColor3 = isFriend and Color3.fromRGB(40, 80, 40) or Color3.fromRGB(50, 50, 60) Instance.new("UICorner", tb).CornerRadius = UDim.new(0, 6) tb.MouseButton1Click:Connect(function() Settings.Friends[plr.Name] = not Settings.Friends[plr.Name] updateFriendsList() end) end end fpScroll.CanvasSize = UDim2.new(0, 0, 0, fpLayout.AbsoluteContentSize.Y + 10) end friendsBtn.MouseButton1Click:Connect(function() friendListOpen = not friendListOpen friendsPanel.Visible = friendListOpen if friendListOpen then updateFriendsList() end end) -- ============ SKIN CHANGER ============ local skinFrame = Instance.new("Frame") skinFrame.Name = "SkinChanger" skinFrame.Size = UDim2.new(1, -10, 0, 45) skinFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 35) skinFrame.LayoutOrder = 16 skinFrame.Parent = scrollFrame Instance.new("UICorner", skinFrame).CornerRadius = UDim.new(0, 10) local skinLabel = Instance.new("TextLabel", skinFrame) skinLabel.Text = "Skin Changer" skinLabel.Font = Enum.Font.Gotham skinLabel.TextSize = 14 skinLabel.TextColor3 = Color3.fromRGB(220, 220, 220) skinLabel.Size = UDim2.new(0.5, 0, 1, 0) skinLabel.Position = UDim2.new(0, 12, 0, 0) skinLabel.BackgroundTransparency = 1 skinLabel.TextXAlignment = Enum.TextXAlignment.Left local skinBtn = Instance.new("TextButton", skinFrame) skinBtn.Text = "Open" skinBtn.Font = Enum.Font.GothamBold skinBtn.TextSize = 11 skinBtn.TextColor3 = Color3.fromRGB(255, 255, 255) skinBtn.Size = UDim2.new(0, 80, 0, 30) skinBtn.Position = UDim2.new(1, -90, 0.5, -15) skinBtn.BackgroundColor3 = Color3.fromRGB(80, 50, 80) Instance.new("UICorner", skinBtn).CornerRadius = UDim.new(0, 8) -- Skin Changer Panel local skinPanel = Instance.new("Frame") skinPanel.Name = "SkinPanel" skinPanel.Size = UDim2.new(0, 240, 0, 260) skinPanel.Position = UDim2.new(0.5, -120, 0.5, -130) skinPanel.BackgroundColor3 = Color3.fromRGB(20, 20, 28) skinPanel.Visible = false skinPanel.Parent = screenGui Instance.new("UICorner", skinPanel).CornerRadius = UDim.new(0, 12) local spStroke = Instance.new("UIStroke", skinPanel) spStroke.Color = Color3.fromRGB(138, 43, 226) spStroke.Thickness = 2 local spTitle = Instance.new("TextLabel", skinPanel) spTitle.Text = "Skin Changer [drag]" spTitle.Font = Enum.Font.GothamBold spTitle.TextSize = 14 spTitle.TextColor3 = Color3.fromRGB(255, 150, 200) spTitle.Size = UDim2.new(1, 0, 0, 35) spTitle.BackgroundTransparency = 1 local spClose = Instance.new("TextButton", skinPanel) spClose.Text = "X" spClose.Font = Enum.Font.GothamBold spClose.TextSize = 14 spClose.TextColor3 = Color3.fromRGB(255, 255, 255) spClose.Size = UDim2.new(0, 30, 0, 30) spClose.Position = UDim2.new(1, -33, 0, 3) spClose.BackgroundColor3 = Color3.fromRGB(150, 50, 50) Instance.new("UICorner", spClose).CornerRadius = UDim.new(0, 8) spClose.MouseButton1Click:Connect(function() skinPanel.Visible = false end) -- Skin presets (Asset IDs from Creator Hub) local presetY = 40 local skinPresetButtons = { {name = "Reset", assetId = 0, color = Color3.fromRGB(80, 50, 50)}, {name = "Neko-Bunny", assetId = 6822270792, color = Color3.fromRGB(70, 50, 80)}, {name = "Girl", assetId = 8208615031, color = Color3.fromRGB(80, 50, 70)}, {name = "Guest 666", assetId = 15680885383, color = Color3.fromRGB(50, 50, 50)}, } -- Save original appearance on load local savedDescription = nil pcall(function() local char = player.Character or player.CharacterAdded:Wait() local hum = char:WaitForChild("Humanoid", 5) if hum then savedDescription = hum:GetAppliedDescription() end end) -- Also save when character respawns player.CharacterAdded:Connect(function(char) if not savedDescription then pcall(function() local hum = char:WaitForChild("Humanoid", 5) if hum then task.wait(1) savedDescription = hum:GetAppliedDescription() end end) end end) local function applySkinFromAsset(assetId) local char = player.Character if not char then return false end local hum = char:FindFirstChildOfClass("Humanoid") if not hum then return false end local success = false pcall(function() -- Try multiple methods to load model (Xeno, Delta, etc) local model = nil -- Method 1: game:GetObjects (Xeno, Synapse, etc) pcall(function() local objects = game:GetObjects("rbxassetid://" .. assetId) if objects and #objects > 0 then model = objects[1] end end) -- Method 2: InsertService (Delta, some mobile executors) if not model then pcall(function() model = InsertService:LoadLocalAsset("rbxassetid://" .. assetId) end) end -- Method 3: InsertService LoadAsset if not model then pcall(function() local m = InsertService:LoadAsset(assetId) if m then model = m:GetChildren()[1] or m end end) end if not model then return end -- Some models have 2 copies - find the right one (with Humanoid or most parts) local actualModel = model local humanoidFound = model:FindFirstChildOfClass("Humanoid") if not humanoidFound then -- Search in children for model with Humanoid for _, child in pairs(model:GetChildren()) do if child:IsA("Model") then if child:FindFirstChildOfClass("Humanoid") then actualModel = child break end end end end -- If still no humanoid, find model with most MeshParts if not actualModel:FindFirstChildOfClass("Humanoid") then local maxParts = 0 for _, child in pairs(model:GetChildren()) do if child:IsA("Model") then local partCount = 0 for _, p in pairs(child:GetDescendants()) do if p:IsA("MeshPart") or p:IsA("Accessory") then partCount = partCount + 1 end end if partCount > maxParts then maxParts = partCount actualModel = child end end end end model = actualModel -- FULL CLEAR for _, child in pairs(char:GetChildren()) do if child:IsA("Accessory") or child:IsA("Shirt") or child:IsA("Pants") or child:IsA("ShirtGraphic") or child:IsA("BodyColors") or child:IsA("CharacterMesh") then child:Destroy() end end -- Clear face local head = char:FindFirstChild("Head") if head then for _, f in pairs(head:GetChildren()) do if f:IsA("Decal") or f:IsA("Texture") then f:Destroy() end end end -- Copy Shirt, Pants, BodyColors, CharacterMesh, Face for _, item in pairs(model:GetDescendants()) do pcall(function() if item:IsA("Shirt") then item:Clone().Parent = char success = true elseif item:IsA("Pants") then item:Clone().Parent = char success = true elseif item:IsA("ShirtGraphic") then item:Clone().Parent = char success = true elseif item:IsA("BodyColors") then item:Clone().Parent = char success = true elseif item:IsA("CharacterMesh") then item:Clone().Parent = char success = true elseif item:IsA("Decal") and item.Parent and item.Parent.Name == "Head" then if head then item:Clone().Parent = head success = true end end end) end -- Function to weld MeshPart to body part local function weldMeshToBody(meshPart, bodyPart) local clone = meshPart:Clone() clone.Anchored = false clone.CanCollide = false clone.CFrame = bodyPart.CFrame clone.Parent = char local weld = Instance.new("Weld") weld.Part0 = bodyPart weld.Part1 = clone weld.C0 = CFrame.new() weld.C1 = CFrame.new() weld.Parent = clone return clone end -- Copy MeshParts (for custom body models like New Guest 666) local bodyPartNames = { "Head", "Torso", "Left Arm", "Right Arm", "Left Leg", "Right Leg", "UpperTorso", "LowerTorso", "LeftUpperArm", "LeftLowerArm", "LeftHand", "RightUpperArm", "RightLowerArm", "RightHand", "LeftUpperLeg", "LeftLowerLeg", "LeftFoot", "RightUpperLeg", "RightLowerLeg", "RightFoot", "HumanoidRootPart" } -- Find model's HumanoidRootPart for reference local modelHRP = model:FindFirstChild("HumanoidRootPart", true) local charHRP = char:FindFirstChild("HumanoidRootPart") if modelHRP and charHRP then -- Get all MeshParts that are NOT body parts for _, item in pairs(model:GetDescendants()) do if item:IsA("MeshPart") or (item:IsA("Part") and item.Name ~= "HumanoidRootPart") then pcall(function() local isBodyPart = false for _, name in pairs(bodyPartNames) do if item.Name == name then isBodyPart = true break end end if not isBodyPart and item.Name ~= "Handle" then -- Find what this part is welded to in the model local weldedTo = nil for _, w in pairs(item:GetChildren()) do if w:IsA("Weld") or w:IsA("Motor6D") or w:IsA("WeldConstraint") then if w.Part0 and w.Part0 ~= item then weldedTo = w.Part0.Name elseif w.Part1 and w.Part1 ~= item then weldedTo = w.Part1.Name end break end end -- Also check parent for welds if not weldedTo and item.Parent then for _, w in pairs(item.Parent:GetChildren()) do if (w:IsA("Weld") or w:IsA("Motor6D")) and (w.Part0 == item or w.Part1 == item) then if w.Part0 == item and w.Part1 then weldedTo = w.Part1.Name elseif w.Part1 == item and w.Part0 then weldedTo = w.Part0.Name end break end end end -- Find target part in character local targetPart = charHRP if weldedTo then local found = char:FindFirstChild(weldedTo) if found then targetPart = found end end -- Calculate offset from model's HRP local offset = modelHRP.CFrame:ToObjectSpace(item.CFrame) local clone = item:Clone() clone.Anchored = false clone.CanCollide = false -- Remove old welds from clone for _, w in pairs(clone:GetDescendants()) do if w:IsA("Weld") or w:IsA("Motor6D") or w:IsA("WeldConstraint") then w:Destroy() end end clone.Parent = char clone.CFrame = charHRP.CFrame * offset -- Weld to HRP (keeps position relative to character) local weld = Instance.new("Weld") weld.Part0 = charHRP weld.Part1 = clone weld.C0 = offset weld.C1 = CFrame.new() weld.Parent = clone success = true end end) end end end -- Manual accessory attachment function local function attachAccessory(acc) local handle = acc:FindFirstChild("Handle") if not handle then return false end -- Find attachment point local accAttachment = handle:FindFirstChildOfClass("Attachment") local targetPart = nil local targetAttachment = nil if accAttachment then -- Search for matching attachment in character for _, part in pairs(char:GetChildren()) do if part:IsA("BasePart") then local match = part:FindFirstChild(accAttachment.Name) if match and match:IsA("Attachment") then targetPart = part targetAttachment = match break end end end end -- Fallback: attach to head if no attachment found if not targetPart then targetPart = char:FindFirstChild("Head") end if not targetPart then return false end -- Clone and setup local clone = acc:Clone() local cloneHandle = clone:FindFirstChild("Handle") if not cloneHandle then return false end clone.Parent = char cloneHandle.Anchored = false cloneHandle.CanCollide = false -- Remove old welds for _, w in pairs(cloneHandle:GetChildren()) do if w:IsA("Weld") or w:IsA("WeldConstraint") or w:IsA("Motor6D") then w:Destroy() end end -- Position and weld if targetAttachment then local cloneAttachment = cloneHandle:FindFirstChild(targetAttachment.Name) if cloneAttachment then cloneHandle.CFrame = targetPart.CFrame * targetAttachment.CFrame * cloneAttachment.CFrame:Inverse() else cloneHandle.CFrame = targetPart.CFrame end else cloneHandle.CFrame = targetPart.CFrame * CFrame.new(0, 0.5, 0) end -- Create weld local weld = Instance.new("Weld") weld.Part0 = targetPart weld.Part1 = cloneHandle weld.C0 = targetPart.CFrame:Inverse() * cloneHandle.CFrame weld.C1 = CFrame.new() weld.Parent = cloneHandle return true end -- Copy ALL Accessories with manual weld local addedAccessories = {} for _, item in pairs(model:GetDescendants()) do if item:IsA("Accessory") and not addedAccessories[item.Name] then pcall(function() if attachAccessory(item) then addedAccessories[item.Name] = true success = true end end) end end -- Also check direct children for _, item in pairs(model:GetChildren()) do if item:IsA("Accessory") and not addedAccessories[item.Name] then pcall(function() if attachAccessory(item) then addedAccessories[item.Name] = true success = true end end) end end model:Destroy() end) return success end -- Store original appearance data manually local originalSkinData = { shirt = nil, pants = nil, bodyColors = nil, accessories = {}, face = nil } local function saveOriginalSkin() local char = player.Character if not char then return end pcall(function() local shirt = char:FindFirstChildOfClass("Shirt") if shirt then originalSkinData.shirt = shirt.ShirtTemplate end local pants = char:FindFirstChildOfClass("Pants") if pants then originalSkinData.pants = pants.PantsTemplate end local bc = char:FindFirstChildOfClass("BodyColors") if bc then originalSkinData.bodyColors = { HeadColor3 = bc.HeadColor3, LeftArmColor3 = bc.LeftArmColor3, LeftLegColor3 = bc.LeftLegColor3, RightArmColor3 = bc.RightArmColor3, RightLegColor3 = bc.RightLegColor3, TorsoColor3 = bc.TorsoColor3 } end originalSkinData.accessories = {} for _, acc in pairs(char:GetChildren()) do if acc:IsA("Accessory") then table.insert(originalSkinData.accessories, acc:Clone()) end end local head = char:FindFirstChild("Head") if head then local face = head:FindFirstChildOfClass("Decal") if face then originalSkinData.face = face.Texture end end end) end -- Save on load task.spawn(function() local char = player.Character or player.CharacterAdded:Wait() task.wait(1) saveOriginalSkin() end) local function resetSkin() local char = player.Character if not char then return end local hum = char:FindFirstChildOfClass("Humanoid") if not hum then return end -- Method 1: Try ApplyDescription local descSuccess = false if savedDescription then descSuccess = pcall(function() hum:ApplyDescription(savedDescription) end) end if not descSuccess then pcall(function() local desc = Players:GetHumanoidDescriptionFromUserId(player.UserId) if desc then descSuccess = pcall(function() hum:ApplyDescription(desc) end) end end) end -- Method 2: Manual restore if ApplyDescription failed if not descSuccess then pcall(function() -- Remove current accessories for _, child in pairs(char:GetChildren()) do if child:IsA("Accessory") then child:Destroy() end end -- Restore shirt if originalSkinData.shirt then local old = char:FindFirstChildOfClass("Shirt") if old then old:Destroy() end local newShirt = Instance.new("Shirt") newShirt.ShirtTemplate = originalSkinData.shirt newShirt.Parent = char end -- Restore pants if originalSkinData.pants then local old = char:FindFirstChildOfClass("Pants") if old then old:Destroy() end local newPants = Instance.new("Pants") newPants.PantsTemplate = originalSkinData.pants newPants.Parent = char end -- Restore body colors if originalSkinData.bodyColors then local old = char:FindFirstChildOfClass("BodyColors") if old then old:Destroy() end local bc = Instance.new("BodyColors") bc.HeadColor3 = originalSkinData.bodyColors.HeadColor3 bc.LeftArmColor3 = originalSkinData.bodyColors.LeftArmColor3 bc.LeftLegColor3 = originalSkinData.bodyColors.LeftLegColor3 bc.RightArmColor3 = originalSkinData.bodyColors.RightArmColor3 bc.RightLegColor3 = originalSkinData.bodyColors.RightLegColor3 bc.TorsoColor3 = originalSkinData.bodyColors.TorsoColor3 bc.Parent = char end -- Restore accessories for _, acc in pairs(originalSkinData.accessories) do if acc then acc:Clone().Parent = char end end -- Restore face if originalSkinData.face then local head = char:FindFirstChild("Head") if head then for _, f in pairs(head:GetChildren()) do if f:IsA("Decal") then f:Destroy() end end local face = Instance.new("Decal") face.Name = "face" face.Texture = originalSkinData.face face.Parent = head end end end) end end for i, preset in ipairs(skinPresetButtons) do local btn = Instance.new("TextButton", skinPanel) btn.Text = preset.name btn.Font = Enum.Font.GothamBold btn.TextSize = 12 btn.TextColor3 = Color3.fromRGB(255, 255, 255) btn.Size = UDim2.new(1, -20, 0, 32) btn.Position = UDim2.new(0, 10, 0, presetY) btn.BackgroundColor3 = preset.color Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 8) presetY = presetY + 38 btn.MouseButton1Click:Connect(function() if preset.assetId == 0 then resetSkin() else applySkinFromAsset(preset.assetId) end end) end -- Custom Asset ID input local customLabel = Instance.new("TextLabel", skinPanel) customLabel.Text = "Asset ID:" customLabel.Font = Enum.Font.Gotham customLabel.TextSize = 11 customLabel.TextColor3 = Color3.fromRGB(180, 180, 180) customLabel.Size = UDim2.new(0.35, 0, 0, 25) customLabel.Position = UDim2.new(0, 10, 0, presetY + 5) customLabel.BackgroundTransparency = 1 customLabel.TextXAlignment = Enum.TextXAlignment.Left local customBox = Instance.new("TextBox", skinPanel) customBox.PlaceholderText = "Asset ID..." customBox.Text = "" customBox.Font = Enum.Font.Gotham customBox.TextSize = 11 customBox.TextColor3 = Color3.fromRGB(255, 255, 255) customBox.Size = UDim2.new(0.6, 0, 0, 28) customBox.Position = UDim2.new(0.35, 5, 0, presetY + 3) customBox.BackgroundColor3 = Color3.fromRGB(40, 40, 50) Instance.new("UICorner", customBox).CornerRadius = UDim.new(0, 6) local applyBtn = Instance.new("TextButton", skinPanel) applyBtn.Text = "Apply Skin" applyBtn.Font = Enum.Font.GothamBold applyBtn.TextSize = 12 applyBtn.TextColor3 = Color3.fromRGB(255, 255, 255) applyBtn.Size = UDim2.new(1, -20, 0, 32) applyBtn.Position = UDim2.new(0, 10, 0, presetY + 38) applyBtn.BackgroundColor3 = Color3.fromRGB(60, 80, 60) Instance.new("UICorner", applyBtn).CornerRadius = UDim.new(0, 8) applyBtn.MouseButton1Click:Connect(function() local id = tonumber(customBox.Text) if id then applySkinFromAsset(id) end end) -- Dragging for skin panel local spDragging, spDragStart, spStartPos = false, nil, nil spTitle.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then spDragging = true spDragStart = input.Position spStartPos = skinPanel.Position end end) spTitle.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then spDragging = false end end) UserInputService.InputChanged:Connect(function(input) if spDragging and (input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseMovement) then local delta = input.Position - spDragStart skinPanel.Position = UDim2.new(spStartPos.X.Scale, spStartPos.X.Offset + delta.X, spStartPos.Y.Scale, spStartPos.Y.Offset + delta.Y) end end) skinBtn.MouseButton1Click:Connect(function() skinPanel.Visible = not skinPanel.Visible end) -- Update canvas size scrollFrame.CanvasSize = UDim2.new(0, 0, 0, listLayout.AbsoluteContentSize.Y + 20) listLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() scrollFrame.CanvasSize = UDim2.new(0, 0, 0, listLayout.AbsoluteContentSize.Y + 20) end) -- Minimized button local miniBtn = Instance.new("TextButton") miniBtn.Name = "MiniBtn" miniBtn.Text = "ESP" miniBtn.Font = Enum.Font.GothamBold miniBtn.TextSize = 14 miniBtn.TextColor3 = Color3.fromRGB(255, 255, 255) miniBtn.Size = UDim2.new(0, 60, 0, 40) miniBtn.Position = UDim2.new(0, 10, 0, 10) miniBtn.BackgroundColor3 = Color3.fromRGB(30, 30, 40) miniBtn.Visible = false miniBtn.Parent = screenGui Instance.new("UICorner", miniBtn).CornerRadius = UDim.new(0, 10) local miniStroke = Instance.new("UIStroke", miniBtn) miniStroke.Color = Color3.fromRGB(138, 43, 226) -- Minimize/Restore local isMinimized = false minimizeBtn.MouseButton1Click:Connect(function() isMinimized = true mainFrame.Visible = false miniBtn.Visible = true end) miniBtn.MouseButton1Click:Connect(function() isMinimized = false mainFrame.Visible = true miniBtn.Visible = false end) -- Dragging for mobile local dragging, dragStart, startPos = false, nil, nil local miniDragging, miniDragStart, miniStartPos = false, nil, nil miniBtn.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then miniDragging = true miniDragStart = input.Position miniStartPos = miniBtn.Position end end) miniBtn.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then miniDragging = false end end) titleLabel.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position startPos = mainFrame.Position end end) UserInputService.InputChanged:Connect(function(input) if dragging and (input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseMovement) then local delta = input.Position - dragStart mainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end if miniDragging and (input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseMovement) then local delta = input.Position - miniDragStart miniBtn.Position = UDim2.new(miniStartPos.X.Scale, miniStartPos.X.Offset + delta.X, miniStartPos.Y.Scale, miniStartPos.Y.Offset + delta.Y) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false miniDragging = false end end) -- ESP Functions local function createESP(plr) if plr == player then return end if ESPObjects[plr] then return end local esp = { billboardGui = nil, nameLabel = nil, healthLabel = nil, distLabel = nil, highlight = nil, souls = {} } -- BillboardGui for info local bb = Instance.new("BillboardGui") bb.Name = "ESP_" .. plr.Name bb.Size = UDim2.new(0, 150, 0, 60) bb.StudsOffset = Vector3.new(0, 3, 0) bb.AlwaysOnTop = true bb.LightInfluence = 0 esp.billboardGui = bb local infoFrame = Instance.new("Frame", bb) infoFrame.Size = UDim2.new(1, 0, 1, 0) infoFrame.BackgroundTransparency = 1 local nameLabel = Instance.new("TextLabel", infoFrame) nameLabel.Size = UDim2.new(1, 0, 0, 18) nameLabel.Position = UDim2.new(0, 0, 0, 0) nameLabel.BackgroundTransparency = 1 nameLabel.Font = Enum.Font.GothamBold nameLabel.TextSize = 14 nameLabel.TextColor3 = Color3.fromRGB(255, 255, 255) nameLabel.TextStrokeTransparency = 0.5 nameLabel.Text = plr.Name esp.nameLabel = nameLabel local healthLabel = Instance.new("TextLabel", infoFrame) healthLabel.Size = UDim2.new(1, 0, 0, 16) healthLabel.Position = UDim2.new(0, 0, 0, 18) healthLabel.BackgroundTransparency = 1 healthLabel.Font = Enum.Font.Gotham healthLabel.TextSize = 12 healthLabel.TextColor3 = Color3.fromRGB(100, 255, 100) healthLabel.TextStrokeTransparency = 0.5 healthLabel.Text = "100%" esp.healthLabel = healthLabel local distLabel = Instance.new("TextLabel", infoFrame) distLabel.Size = UDim2.new(1, 0, 0, 14) distLabel.Position = UDim2.new(0, 0, 0, 34) distLabel.BackgroundTransparency = 1 distLabel.Font = Enum.Font.Gotham distLabel.TextSize = 11 distLabel.TextColor3 = Color3.fromRGB(200, 200, 200) distLabel.TextStrokeTransparency = 0.5 distLabel.Text = "0m" esp.distLabel = distLabel -- Highlight for Chams/Highlight local highlight = Instance.new("Highlight") highlight.FillColor = Settings.Color highlight.OutlineColor = Color3.fromRGB(255, 255, 255) highlight.FillTransparency = 0.5 highlight.OutlineTransparency = 0 highlight.Enabled = false esp.highlight = highlight ESPObjects[plr] = esp end local function removeESP(plr) local esp = ESPObjects[plr] if esp then if esp.billboardGui then esp.billboardGui:Destroy() end if esp.highlight then esp.highlight:Destroy() end for _, soul in pairs(esp.souls) do if soul then soul:Destroy() end end ESPObjects[plr] = nil end -- Clean up character visuals if plr.Character then local box = plr.Character:FindFirstChild("RatmirBox") local box3d = plr.Character:FindFirstChild("Ratmir3DBox") if box then box:Destroy() end if box3d then box3d:Destroy() end end -- Clean up china hat if chinaHats[plr] then chinaHats[plr]:Destroy() chinaHats[plr] = nil end end -- China Hat function (3D cone object) local function updateChinaHats() if not Settings.ChinaHat then for _, hat in pairs(chinaHats) do if hat then hat:Destroy() end end chinaHats = {} return end local currentColor = Settings.Rainbow and Color3.fromHSV(rainbowHue, 1, 1) or Settings.Color local size = Settings.ChinaHatSize for _, plr in pairs(Players:GetPlayers()) do local showHat = false if plr == player then -- Always show on local player showHat = true else local isFriend = Settings.Friends[plr.Name] -- Show hat ONLY on friends if ChinaHatFriends is true showHat = (not Settings.ChinaHatFriends) or isFriend end local char = plr.Character local head = char and char:FindFirstChild("Head") if showHat and head then if not chinaHats[plr] or not chinaHats[plr].Parent then -- Create 3D cone china hat (wide and flat like real chinese hat) local cone = Instance.new("ConeHandleAdornment") cone.Name = "ChinaHat" cone.Adornee = head cone.Height = 1.1 * size -- Taller cone.Radius = 2.2 * size -- Wide radius -- Rotate +90 degrees on X axis so cone points UP (tip on top) cone.CFrame = CFrame.new(0, 0.6 * size, 0) * CFrame.Angles(math.rad(90), 0, 0) cone.Color3 = currentColor cone.Transparency = 0.2 cone.AlwaysOnTop = true cone.ZIndex = 5 cone.Parent = head chinaHats[plr] = cone else -- Update color chinaHats[plr].Color3 = currentColor end elseif chinaHats[plr] then chinaHats[plr]:Destroy() chinaHats[plr] = nil end end end -- Target ESP function (60m range, bigger size) local function updateTargetESP() if not Settings.TargetESP then if targetESPObj then targetESPObj:Destroy() targetESPObj = nil end currentTarget = nil return end local currentColor = Settings.Rainbow and Color3.fromHSV(rainbowHue, 1, 1) or Settings.Color -- Get my position local myChar = player.Character local myHRP = myChar and myChar:FindFirstChild("HumanoidRootPart") if not myHRP then return end -- Find lowest HP player within 60 meters local lowestHP = math.huge local target = nil for _, plr in pairs(Players:GetPlayers()) do if plr ~= player then local char = plr.Character local hum = char and char:FindFirstChildOfClass("Humanoid") local hrp = char and char:FindFirstChild("HumanoidRootPart") if hum and hrp and hum.Health > 0 then local dist = (hrp.Position - myHRP.Position).Magnitude if dist <= 60 and hum.Health < lowestHP then lowestHP = hum.Health target = plr end end end end if not target then if targetESPObj then targetESPObj:Destroy() targetESPObj = nil end currentTarget = nil return end if target ~= currentTarget then if targetESPObj then targetESPObj:Destroy() end targetESPObj = nil currentTarget = target end local char = target.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") if not hrp then return end -- Create or update target ESP (bigger size) if not targetESPObj or not targetESPObj.Parent then targetESPObj = Instance.new("BillboardGui") targetESPObj.Name = "TargetESP" targetESPObj.Size = UDim2.new(0, 120, 0, 120) targetESPObj.StudsOffset = Vector3.new(0, 0, 0) targetESPObj.AlwaysOnTop = true targetESPObj.Parent = hrp local img = Instance.new("ImageLabel", targetESPObj) img.Name = "TargetImg" img.Size = UDim2.new(1, 0, 1, 0) img.BackgroundTransparency = 1 img.Image = "rbxassetid://83694856798366" img.ImageColor3 = currentColor end if targetESPObj.Parent ~= hrp then targetESPObj.Parent = hrp end -- Smooth rotation targetRotation = targetRotation + 1.5 if targetRotation >= 360 then targetRotation = 0 end local img = targetESPObj:FindFirstChild("TargetImg") if img then img.Rotation = targetRotation img.ImageColor3 = currentColor end end local function updateESP() local currentColor = Settings.Rainbow and Color3.fromHSV(rainbowHue, 1, 1) or Settings.Color for plr, esp in pairs(ESPObjects) do local char = plr.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") local hum = char and char:FindFirstChildOfClass("Humanoid") local head = char and char:FindFirstChild("Head") if not Settings.Enabled or not char or not hrp or not hum or hum.Health <= 0 then if esp.billboardGui then esp.billboardGui.Enabled = false end if esp.highlight then esp.highlight.Enabled = false end for _, soul in pairs(esp.souls) do if soul then soul.Enabled = false end end local box = char and char:FindFirstChild("RatmirBox") local box3d = char and char:FindFirstChild("Ratmir3DBox") if box then box:Destroy() end if box3d then box3d:Destroy() end else -- Attach billboard if esp.billboardGui.Parent ~= head then esp.billboardGui.Parent = head end esp.billboardGui.Enabled = true -- Update name esp.nameLabel.Visible = Settings.ShowNames esp.nameLabel.TextColor3 = currentColor -- Update health esp.healthLabel.Visible = Settings.ShowHealth local hp = hum.Health local maxHp = hum.MaxHealth if Settings.HealthStyle == "Percent" then esp.healthLabel.Text = math.floor(hp / maxHp * 100) .. "%" else esp.healthLabel.Text = math.floor(hp) .. " / " .. math.floor(maxHp) end local hpRatio = hp / maxHp esp.healthLabel.TextColor3 = Color3.fromRGB(255 * (1 - hpRatio), 255 * hpRatio, 50) -- Update distance esp.distLabel.Visible = Settings.ShowDistance local myHRP = player.Character and player.Character:FindFirstChild("HumanoidRootPart") if myHRP then local dist = (hrp.Position - myHRP.Position).Magnitude esp.distLabel.Text = math.floor(dist) .. "m" end -- Clear old visuals esp.highlight.Enabled = false for _, soul in pairs(esp.souls) do if soul then soul.Enabled = false end end local oldBox = char:FindFirstChild("RatmirBox") local old3DBox = char:FindFirstChild("Ratmir3DBox") if oldBox then oldBox:Destroy() end if old3DBox then old3DBox:Destroy() end local espType = Settings.ESPType -- 2D Box (BillboardGui method) if espType == "2D Box" then local box = Instance.new("BillboardGui") box.Name = "RatmirBox" box.Adornee = hrp box.Size = UDim2.new(4, 0, 5, 0) box.AlwaysOnTop = true box.Parent = char local frame = Instance.new("Frame", box) frame.Size = UDim2.new(1, 0, 1, 0) frame.BackgroundTransparency = 1 local stroke = Instance.new("UIStroke", frame) stroke.Color = currentColor stroke.Thickness = 2 -- 3D Box (BoxHandleAdornment method) elseif espType == "3D Box" then local folder = Instance.new("Folder") folder.Name = "Ratmir3DBox" folder.Parent = char local size = Vector3.new(4, 5, 2) local edges = { {Vector3.new(-1,-1,-1), Vector3.new(1,-1,-1)}, {Vector3.new(-1,-1,-1), Vector3.new(-1,1,-1)}, {Vector3.new(-1,-1,-1), Vector3.new(-1,-1,1)}, {Vector3.new(1,-1,-1), Vector3.new(1,1,-1)}, {Vector3.new(1,-1,-1), Vector3.new(1,-1,1)}, {Vector3.new(-1,1,-1), Vector3.new(1,1,-1)}, {Vector3.new(-1,1,-1), Vector3.new(-1,1,1)}, {Vector3.new(1,1,-1), Vector3.new(1,1,1)}, {Vector3.new(-1,-1,1), Vector3.new(1,-1,1)}, {Vector3.new(-1,-1,1), Vector3.new(-1,1,1)}, {Vector3.new(1,-1,1), Vector3.new(1,1,1)}, {Vector3.new(-1,1,1), Vector3.new(1,1,1)} } for _, e in pairs(edges) do local beam = Instance.new("BoxHandleAdornment") beam.Name = "Edge" beam.Adornee = hrp beam.Size = Vector3.new(0.1, 0.1, (e[2] - e[1]).Magnitude * size.Z / 2) beam.CFrame = CFrame.new((e[1] * size/2 + e[2] * size/2) / 2, e[2] * size/2) beam.Color3 = currentColor beam.Transparency = 0.3 beam.AlwaysOnTop = true beam.ZIndex = 5 beam.Parent = folder end -- Highlight/Chams elseif espType == "Chams" or espType == "Highlight" then if esp.highlight.Parent ~= char then esp.highlight.Parent = char end esp.highlight.Enabled = true esp.highlight.FillColor = currentColor esp.highlight.FillTransparency = espType == "Chams" and 0.3 or 0.7 -- Soul effect elseif espType == "Soul" then if #esp.souls == 0 then for i = 1, 3 do local soul = Instance.new("BillboardGui") soul.Size = UDim2.new(0, 20, 0, 20) soul.AlwaysOnTop = true soul.LightInfluence = 0 local soulImg = Instance.new("Frame", soul) soulImg.Size = UDim2.new(1, 0, 1, 0) soulImg.BackgroundColor3 = currentColor soulImg.BackgroundTransparency = 0.3 Instance.new("UICorner", soulImg).CornerRadius = UDim.new(1, 0) table.insert(esp.souls, soul) end end local t = tick() for i, soul in ipairs(esp.souls) do if soul.Parent ~= hrp then soul.Parent = hrp end soul.Enabled = true local angle = t * 2 + (i - 1) * (math.pi * 2 / 3) local radius = 2.5 local yOffset = math.sin(t * 3 + i) * 0.5 soul.StudsOffset = Vector3.new(math.cos(angle) * radius, yOffset + 1, math.sin(angle) * radius) soul:FindFirstChildOfClass("Frame").BackgroundColor3 = currentColor end elseif espType == "Soul V2" then if #esp.souls ~= 4 then for _, s in pairs(esp.souls) do s:Destroy() end esp.souls = {} for i = 1, 4 do local soul = Instance.new("BillboardGui") soul.Size = UDim2.new(0, 15, 0, 15) soul.AlwaysOnTop = true local soulImg = Instance.new("Frame", soul) soulImg.Size = UDim2.new(1, 0, 1, 0) soulImg.BackgroundColor3 = currentColor soulImg.BackgroundTransparency = 0.2 Instance.new("UICorner", soulImg).CornerRadius = UDim.new(1, 0) table.insert(esp.souls, soul) end end local t = tick() for i, soul in ipairs(esp.souls) do if soul.Parent ~= hrp then soul.Parent = hrp end soul.Enabled = true local angle = t * 1.5 + (i - 1) * (math.pi / 2) local yAngle = t * 2 + i local radius = 1.8 local yPos = math.sin(yAngle) * 2 soul.StudsOffset = Vector3.new(math.cos(angle) * radius, yPos, math.sin(angle) * radius) soul:FindFirstChildOfClass("Frame").BackgroundColor3 = currentColor end elseif espType == "Stars" then if #esp.souls ~= 5 then for _, s in pairs(esp.souls) do s:Destroy() end esp.souls = {} for i = 1, 5 do local star = Instance.new("BillboardGui") star.Size = UDim2.new(0, 18, 0, 18) star.AlwaysOnTop = true local starLabel = Instance.new("TextLabel", star) starLabel.Size = UDim2.new(1, 0, 1, 0) starLabel.BackgroundTransparency = 1 starLabel.Text = "*" starLabel.TextColor3 = currentColor starLabel.TextSize = 22 starLabel.Font = Enum.Font.GothamBold table.insert(esp.souls, star) end end local t = tick() for i, star in ipairs(esp.souls) do if star.Parent ~= hrp then star.Parent = hrp end star.Enabled = true local angle = t * 1.2 + (i - 1) * (math.pi * 2 / 5) local radius = 2 + math.sin(t * 2 + i) * 0.5 local yPos = math.sin(t * 3 + i * 0.7) * 1.5 star.StudsOffset = Vector3.new(math.cos(angle) * radius, yPos + 0.5, math.sin(angle) * radius) star:FindFirstChildOfClass("TextLabel").TextColor3 = currentColor end end end end end -- Player management for _, plr in pairs(Players:GetPlayers()) do createESP(plr) end Players.PlayerAdded:Connect(function(plr) wait(1) createESP(plr) end) Players.PlayerRemoving:Connect(function(plr) removeESP(plr) end) -- Character respawn handling for _, plr in pairs(Players:GetPlayers()) do if plr ~= player then plr.CharacterAdded:Connect(function() wait(0.5) if ESPObjects[plr] then ESPObjects[plr].billboardGui.Parent = nil ESPObjects[plr].highlight.Parent = nil end end) end end local updateCounter = 0 local function updateTrail() local char = player.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") local torso = char and (char:FindFirstChild("UpperTorso") or char:FindFirstChild("Torso")) if not Settings.TrailEnabled or not hrp or not torso then return end local currentColor = Settings.Rainbow and Color3.fromHSV(rainbowHue, 1, 1) or Settings.Color local size = Settings.TrailSize if not myTrail or not myTrail.Parent then myTrail = Instance.new("Folder") myTrail.Name = "VisualTrail" myTrail.Parent = char end local trailType = Settings.TrailType local backPos = torso.CFrame * CFrame.new(0, 0, 1) if trailType == "Ghost" then local baseSize = 60 * size local ghost = Instance.new("BillboardGui") ghost.Size = UDim2.new(0, baseSize, 0, baseSize) ghost.AlwaysOnTop = false ghost.StudsOffsetWorldSpace = backPos.Position ghost.Parent = myTrail local frame = Instance.new("Frame", ghost) frame.Size = UDim2.new(1, 0, 1, 0) frame.BackgroundColor3 = currentColor frame.BackgroundTransparency = 0.3 frame.BorderSizePixel = 0 Instance.new("UICorner", frame).CornerRadius = UDim.new(0.5, 0) spawn(function() for i = 1, 30 do if not ghost.Parent then return end frame.BackgroundTransparency = 0.3 + (i / 30) * 0.7 local newSize = baseSize - i * (1.5 * size) ghost.Size = UDim2.new(0, math.max(newSize, 5), 0, math.max(newSize, 5)) wait(0.02) end ghost:Destroy() end) elseif trailType == "Classic" then local baseSize = 45 * size local bill = Instance.new("BillboardGui") bill.Size = UDim2.new(0, baseSize, 0, baseSize) bill.AlwaysOnTop = false bill.StudsOffsetWorldSpace = backPos.Position bill.Parent = myTrail local frame = Instance.new("Frame", bill) frame.Size = UDim2.new(1, 0, 1, 0) frame.BackgroundColor3 = currentColor frame.BackgroundTransparency = 0.5 frame.BorderSizePixel = 0 Instance.new("UICorner", frame).CornerRadius = UDim.new(1, 0) spawn(function() for i = 1, 20 do if not bill.Parent then return end frame.BackgroundTransparency = 0.5 + (i / 20) * 0.5 wait(0.03) end bill:Destroy() end) else local symbols = {Stars = "*", Hearts = "<3", Lightning = "!", Sparkle = "+"} local baseSize = 50 * size local textSize = 32 * size local bill = Instance.new("BillboardGui") bill.Size = UDim2.new(0, baseSize, 0, baseSize) bill.AlwaysOnTop = false bill.StudsOffsetWorldSpace = backPos.Position bill.Parent = myTrail local lbl = Instance.new("TextLabel", bill) lbl.Size = UDim2.new(1, 0, 1, 0) lbl.BackgroundTransparency = 1 lbl.Text = symbols[trailType] or "*" lbl.TextColor3 = currentColor lbl.TextSize = textSize lbl.Font = Enum.Font.GothamBold lbl.TextStrokeColor3 = currentColor lbl.TextStrokeTransparency = 0.5 spawn(function() for i = 1, 25 do if not bill.Parent then return end lbl.TextTransparency = i / 25 lbl.TextStrokeTransparency = 0.5 + (i / 25) * 0.5 wait(0.03) end bill:Destroy() end) end end RunService.Heartbeat:Connect(function(dt) -- Rainbow title animation rainbowHue = (rainbowHue + dt * 0.3) % 1 titleLabel.TextColor3 = Color3.fromHSV(rainbowHue, 0.8, 1) mainStroke.Color = Color3.fromHSV(rainbowHue, 0.7, 0.9) miniStroke.Color = Color3.fromHSV(rainbowHue, 0.7, 0.9) fpStroke.Color = Color3.fromHSV(rainbowHue, 0.7, 0.9) -- Update color preview if rainbow if Settings.Rainbow then colorPreview.BackgroundColor3 = Color3.fromHSV(rainbowHue, 1, 1) end -- Update ESP (throttled for performance) updateCounter = updateCounter + 1 if updateCounter >= 3 then updateCounter = 0 updateESP() updateTrail() updateChinaHats() updateTargetESP() end end)