local WindUI = loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))() -- Khởi tạo dịch vụ và biến chung local Players = game:GetService("Players") local RunService = game:GetService("RunService") local TweenService = game:GetService("TweenService") local ReplicatedStorage = game:GetService("ReplicatedStorage") local Lighting = game:GetService("Lighting") local VirtualUser = game:GetService("VirtualUser") local player = Players.LocalPlayer local character = player.Character or player.CharacterAdded:Wait() local hrp = character:WaitForChild("HumanoidRootPart") -- Ẩn Roblox Gui Notification mặc định local CoreGui = game:GetService("CoreGui") local RobloxGui = CoreGui:WaitForChild("RobloxGui") local notifFrame = RobloxGui:FindFirstChild("NotificationFrame") or RobloxGui:FindFirstChild("SendNotificationInfo") if notifFrame then notifFrame:Destroy() end RobloxGui.ChildAdded:Connect(function(child) if child.Name == "NotificationFrame" then child:Destroy() end end) -- Tạo Window chính với Theme màu mới (Indigo) local Window = WindUI:CreateWindow({ Title = "Khoa Dev Hub", Icon = "star", Author = "Khoa Dev", Folder = "KHOA_DEV", Size = UDim2.fromOffset(450, 390), Transparent = true, Theme = "Indigo", -- Màu mới thiết kế lại Resizable = true, SideBarWidth = 200, BackgroundImageTransparency = 0.42, HideSearchBar = true, ScrollBarEnabled = false, User = { Enabled = true, Anonymous = false, Callback = function() print("clicked") end, }, }) Window:Tag({ Title = "v1.0.0", Color = Color3.fromHex("#5c7cfa") -- Màu Indigo khớp với Theme }) -- Khởi tạo các Tab tiếng Việt local Tab1 = Window:Tab({ Title = "Chính", Icon = "home", Locked = false, }) local Tab2 = Window:Tab({ Title = "Hút Vật Phẩm", Icon = "download", Locked = false, }) local Tab3 = Window:Tab({ Title = "Người Chơi", Icon = "user", Locked = false, }) local Tab4 = Window:Tab({ Title = "Chiến Đấu", Icon = "sword", Locked = false, }) local Tab5 = Window:Tab({ Title = "Nhìn Xuyên (ESP)", Icon = "eye", Locked = false, }) local Tab6 = Window:Tab({ Title = "Tính Năng Khác", Icon = "settings", Locked = false, }) local Tab7 = Window:Tab({ Title = "Quái Vật", Icon = "shield-alert", Locked = false, }) -- ========================================== -- TAB 1: CHÍNH (Main Features) -- ========================================== local SectionDays = Tab1:Section({ Title = "Thời Gian", TextXAlignment = "Left", TextSize = 17, }) -- Config Auto Days local flying = false local radius = 150 local height = 100 local speed = 1 local angle = 0 local ToggleAutoDays = Tab1:Toggle({ Title = "Tự Động Chạy Quanh Bản Đồ", Desc = "Bay vòng quanh bản đồ theo quỹ đạo tròn", Icon = "star", Type = "Toggle", Default = false, Callback = function(state) flying = state end }) RunService.RenderStepped:Connect(function(dt) if flying and hrp then angle = angle + speed * dt local x = math.cos(angle) * radius local z = math.sin(angle) * radius local newPos = Vector3.new(x, height, z) hrp.CFrame = CFrame.new(newPos, Vector3.new(0, height, 0)) end end) local SectionFarm = Tab1:Section({ Title = "Nông Trại (Farm)", TextXAlignment = "Left", TextSize = 17, }) local ParagraphNote = Tab1:Paragraph({ Title = "Lưu Ý", Desc = "Chức năng Tự động đánh Thỏ đang trong giai đoạn Beta. Camera có thể bị lỗi xoay chuyển, nhưng script vẫn hoạt động bình thường.", Color = "White", }) local autoKill = false local savedPositionBunny local bunny local lastBunnyCheck = 0 local function findBunny() local characters = workspace:FindFirstChild("Characters") if characters then bunny = characters:FindFirstChild("Bunny") else bunny = nil end end RunService.RenderStepped:Connect(function(dt) if autoKill and hrp then lastBunnyCheck = lastBunnyCheck + dt if lastBunnyCheck >= 10 then findBunny() lastBunnyCheck = 0 end if bunny and bunny.PrimaryPart then hrp.CFrame = hrp.CFrame:Lerp(bunny.PrimaryPart.CFrame * CFrame.new(0, 0, -2), 0.3) VirtualUser:Button1Down(Vector2.new(0, 0), workspace.CurrentCamera.CFrame) VirtualUser:Button1Up(Vector2.new(0, 0), workspace.CurrentCamera.CFrame) end end end) local ToggleBunny = Tab1:Toggle({ Title = "Tự Động Diệt Thỏ", Desc = "Tự động bay tới và tấn công Thỏ", Icon = "bird", Type = "Toggle", Default = false, Callback = function(state) autoKill = state if autoKill then savedPositionBunny = hrp.CFrame findBunny() else if savedPositionBunny then hrp.CFrame = savedPositionBunny end end end }) local SectionChild = Tab1:Section({ Title = "Giải Cứu", TextXAlignment = "Left", TextSize = 17, }) local ButtonChest = Tab1:Button({ Title = "Mở Tất Cả Rương", Desc = "Tự động mở toàn bộ rương vật phẩm trên bản đồ", Locked = false, Callback = function() local chestFolder = workspace.Items local remote = ReplicatedStorage.RemoteEvents:WaitForChild("RequestOpenItemChest") for _, v in ipairs(chestFolder:GetChildren()) do if v.Name == "Item Chest" or v.Name == "Item Chest2" or v.Name == "Item Chest3" or v.Name == "Item Chest4" or v.Name == "Item Chest5" or v.Name == "Item Chest6" or v.Name == "Alien Chest" then remote:FireServer(v) end end end }) local function rescueChild(childName) local originalCFrame = hrp.CFrame local function findChildModel() local charactersFolder = workspace:WaitForChild("Characters") for _, child in pairs(charactersFolder:GetChildren()) do if child.Name == childName then local childHrp = child:FindFirstChild("HumanoidRootPart") or child:FindFirstChildWhichIsA("BasePart") if childHrp then return childHrp end end end return nil end local target = findChildModel() if not target then WindUI:Notify({ Title = "Lỗi", Content = "Không tìm thấy " .. childName .. ", hoặc cấp lửa trại quá thấp", Duration = 3, Icon = "bird", }) else local distance = (hrp.Position - target.Position).Magnitude local tweenInfo = TweenInfo.new(distance / 500, Enum.EasingStyle.Linear) local tweenTo = TweenService:Create(hrp, tweenInfo, {CFrame = target.CFrame + Vector3.new(0, 3, 0)}) tweenTo:Play() tweenTo.Completed:Wait() task.wait(15) local tweenBack = TweenService:Create(hrp, TweenInfo.new(1, Enum.EasingStyle.Linear), {CFrame = originalCFrame}) tweenBack:Play() end end local ButtonChild1 = Tab1:Button({ Title = "Cứu Đứa Trẻ 1", Desc = "Đưa Đứa Trẻ Bị Lạc về đống lửa trại", Locked = false, Callback = function() rescueChild("Lost Child") end }) local ButtonChild2 = Tab1:Button({ Title = "Cứu Đứa Trẻ 2", Desc = "Đưa Đứa Trẻ Bị Lạc 2 về đống lửa trại", Locked = false, Callback = function() rescueChild("Lost Child2") end }) local ButtonChild3 = Tab1:Button({ Title = "Cứu Đứa Trẻ 3", Desc = "Đưa Đứa Trẻ Bị Lạc 3 về đống lửa trại", Locked = false, Callback = function() rescueChild("Lost Child3") end }) local ButtonChild4 = Tab1:Button({ Title = "Cứu Đứa Trẻ 4", Desc = "Đưa Đứa Trẻ Bị Lạc 4 về đống lửa trại", Locked = false, Callback = function() rescueChild("Lost Child4") end }) local SectionCook = Tab1:Section({ Title = "Ăn Uống & Nấu Nướng", TextXAlignment = "Left", TextSize = 17, }) local ButtonEat = Tab1:Button({ Title = "Tự Động Ăn Thức Ăn", Desc = "Tự động ăn Cooked Morsel khi độ đói < 90%", Locked = false, Callback = function() local requestConsume = ReplicatedStorage.RemoteEvents:WaitForChild("RequestConsumeItem") local hungryBar = player:WaitForChild("PlayerGui"):WaitForChild("Interface") :WaitForChild("StatBars"):WaitForChild("HungerBar"):WaitForChild("Bar") local function eatFood() for _, item in ipairs(workspace.Items:GetChildren()) do if item.Name == "Cooked Morsel" then requestConsume:InvokeServer(item) print("Đã ăn 1 Cooked Morsel") break end end end hungryBar:GetPropertyChangedSignal("Size"):Connect(function() if hungryBar.Size.X.Scale < 0.9 then eatFood() end end) print("Auto Eat đã bật") end }) local ButtonCook = Tab1:Button({ Title = "Nấu Chín Đồ Ăn", Desc = "Gom tất cả Morsel & Steak về lửa trại chính để nướng", Locked = false, Callback = function() local campfire = workspace.Map.Campground:FindFirstChild("MainFire") if not campfire or not campfire.PrimaryPart then warn("Không tìm thấy lửa trại!") return end for _, item in ipairs(workspace.Items:GetChildren()) do if item:IsA("Model") and item.PrimaryPart and (string.find(item.Name, "Morsel") or string.find(item.Name, "Steak")) then ReplicatedStorage.RemoteEvents.RequestStartDraggingItem:FireServer(item) local targetCFrame = campfire.PrimaryPart.CFrame * CFrame.new(0, 8, 0) item:PivotTo(targetCFrame) ReplicatedStorage.RemoteEvents.StopDraggingItem:FireServer(item) end end end }) -- ========================================== -- TAB 2: HÚT VẬT PHẨM (Redesigned Brings) -- ========================================== local SectionBrings = Tab2:Section({ Title = "Hút Vật Phẩm Tùy Chọn", TextXAlignment = "Left", TextSize = 17, }) local allItemsList = { "Log", "Coal", "Oil Barrel", "Fuel Canister", "Sapling", "Cultist", "Bear Corpse", "Alpha Wolf Corpse", "Wolf Corpse", "Crossbow Cultist", "Bolt", "Sheet Metal", "UFO Junk", "UFO Component", "Broken Fan", "Broken Radio", "Broken Microwave", "Tyre", "Metal Chair", "Old Car Engine", "Cultist Experiment", "Washing Machine", "Cultist Prototype", "UFO Scrap", "Steak", "BBQ Ribs", "Candy Apple", "Carrot", "Berry", "Cotton Candy", "Chili", "Lava Eel", "Candy Corn", "Morsel", "Stew", "Corn", "Pumpkin", "Casserole", "Apple", "Berry Juice", "Ribs", "Cake", "Hearty Stew", "Shark", "Swordfish", "Eel", "Char", "Mackerel", "Salmon", "Clownfish", "Revolver Ammo", "Rifle Ammo", "Shotgun Ammo", "Bandage", "Rifle", "Revolver", "Laser Cannon", "Ray Gun", "Laser Sword", "Katana", "Strong Flashlight", "Old Flashlight" } local selectedItems = {} _G.BringActive = false _G.SavedPosition = nil local requestDrag = ReplicatedStorage.RemoteEvents.RequestStartDraggingItem local stopDrag = ReplicatedStorage.RemoteEvents.StopDraggingItem local BringsDropdown = Tab2:Dropdown({ Title = "Chọn các vật phẩm cần hút", Values = allItemsList, Multi = true, Default = {}, Callback = function(values) selectedItems = {} for _, val in ipairs(values) do selectedItems[val] = true end end }) local ButtonBringStart = Tab2:Button({ Title = "Bắt Đầu Hút", Desc = "Hút liên tục các vật phẩm đã chọn về bản thân", Callback = function() if _G.BringActive then return end _G.BringActive = true if hrp then _G.SavedPosition = hrp.CFrame end task.spawn(function() while _G.BringActive do if hrp then for _, item in ipairs(workspace.Items:GetChildren()) do if not _G.BringActive then break end if (item:IsA("Model") or item:IsA("Tool")) and item.PrimaryPart and selectedItems[item.Name] then requestDrag:FireServer(item) task.wait(0.1) item:PivotTo(hrp.CFrame * CFrame.new(0, 3, 0)) task.wait(0.1) stopDrag:FireServer(item) task.wait(0.2) end end end task.wait(1) end end) end }) local ButtonBringStop = Tab2:Button({ Title = "Dừng Hút", Desc = "Dừng hút vật phẩm và quay lại vị trí cũ", Callback = function() _G.BringActive = false if hrp and _G.SavedPosition then hrp.CFrame = _G.SavedPosition _G.SavedPosition = nil end end }) -- ========================================== -- TAB 3: NGƯỜI CHƠI (Player) -- ========================================== local SectionGod = Tab3:Section({ Title = "Máu Không Giới Hạn", TextXAlignment = "Left", TextSize = 17, }) local ToggleGod = Tab3:Toggle({ Title = "Chế Độ Bất Tử (God Mode)", Desc = "Máu vô hạn", Icon = "bird", Type = "Toggle", Default = false, Callback = function(state) if state then loadstring(game:HttpGet("https://raw.githubusercontent.com/ProBaconHub/DATABASE/refs/heads/main/99%20Nights%20in%20the%20Forest/Infinite%20Health.lua"))() else print("God mode off") end end }) local SectionSpeed = Tab3:Section({ Title = "Tốc Độ Di Chuyển", TextXAlignment = "Left", TextSize = 17, }) local humanoid = character:WaitForChild("Humanoid") local speedEnabled = false local selectedSpeed = 70 local defaultSpeed = 16 local SliderSpeed = Tab3:Slider({ Title = "Tốc Độ Chạy (WalkSpeed)", Step = 1, Value = { Min = 20, Max = 1200, Default = 70, }, Callback = function(value) selectedSpeed = value if speedEnabled and humanoid then humanoid.WalkSpeed = selectedSpeed end end }) local ToggleSpeed = Tab3:Toggle({ Title = "Kích Hoạt Tốc Độ", Desc = "Bật/Tắt tốc độ di chuyển tùy chọn", Icon = "bird", Type = "Toggle", Default = false, Callback = function(state) speedEnabled = state if humanoid then if speedEnabled then humanoid.WalkSpeed = selectedSpeed else humanoid.WalkSpeed = defaultSpeed end end end }) local SectionPlayerOthers = Tab3:Section({ Title = "Khác", TextXAlignment = "Left", TextSize = 17, }) -- ========================================== -- TAB 4: CHIẾN ĐẤU (Combat) -- ========================================== local SectionKillAura = Tab4:Section({ Title = "Tự Động Đánh (Kill Aura)", TextXAlignment = "Left", TextSize = 17, }) local ActiveKillAura = false local DistanceForKillAura = 70 local SliderKillAura = Tab4:Slider({ Title = "Khoảng Cách Tấn Công", Step = 1, Value = { Min = 20, Max = 1200, Default = 70, }, Callback = function(value) DistanceForKillAura = tonumber(value) or 70 end }) local function runKillAura() task.spawn(function() while ActiveKillAura do local weapon = player.Inventory:FindFirstChild("Old Axe") or player.Inventory:FindFirstChild("Good Axe") or player.Inventory:FindFirstChild("Strong Axe") or player.Inventory:FindFirstChild("Chainsaw") if weapon and hrp then for _, mob in pairs(workspace.Characters:GetChildren()) do if mob:IsA("Model") and mob.PrimaryPart and mob ~= player.Character then local distance = (mob.PrimaryPart.Position - hrp.Position).Magnitude if distance <= DistanceForKillAura then ReplicatedStorage.RemoteEvents.ToolDamageObject:InvokeServer( mob, weapon, 999, hrp.CFrame ) end end end end task.wait(0.1) end end) end local ToggleKillAura = Tab4:Toggle({ Title = "Bật Tự Động Đánh", Desc = "Tấn công quái vật trong khoảng cách cài đặt", Default = false, Callback = function(state) ActiveKillAura = state if state then runKillAura() end end }) local SectionTreeAura = Tab4:Section({ Title = "Tự Động Chặt Cây", TextXAlignment = "Left", TextSize = 17, }) local ActiveAutoChopTree = false local DistanceForAutoChopTree = 1000 local function runAutoChopTree() task.spawn(function() while ActiveAutoChopTree do local weapon = player.Inventory:FindFirstChild("Old Axe") or player.Inventory:FindFirstChild("Good Axe") or player.Inventory:FindFirstChild("Strong Axe") or player.Inventory:FindFirstChild("Chainsaw") if weapon and hrp then local function chop(folder) for _, tree in pairs(folder:GetChildren()) do if tree:IsA("Model") and (tree.Name == "Small Tree" or tree.Name == "TreeBig1" or tree.Name == "TreeBig2") and tree.PrimaryPart then local distance = (tree.PrimaryPart.Position - hrp.Position).Magnitude if distance <= DistanceForAutoChopTree then ReplicatedStorage.RemoteEvents.ToolDamageObject:InvokeServer( tree, weapon, 999, hrp.CFrame ) end end end end chop(workspace.Map.Foliage) chop(workspace.Map.Landmarks) end task.wait(0.1) end end) end local SliderTreeAura = Tab4:Slider({ Title = "Khoảng Cách Chặt Cây", Step = 1, Value = { Min = 20, Max = 100, Default = 100, }, Callback = function(value) DistanceForAutoChopTree = tonumber(value) or 1000 end }) local ToggleTreeAura = Tab4:Toggle({ Title = "Tự Động Chặt Cây (Tree Aura)", Desc = "Tự động chặt củi trong phạm vi cài đặt", Icon = "bird", Type = "Toggle", Default = false, Callback = function(state) ActiveAutoChopTree = state if ActiveAutoChopTree then runAutoChopTree() end end }) -- ========================================== -- TAB 5: NHÌN XUYÊN (ESP) -- ========================================== local SectionFuelESP = Tab5:Section({ Title = "Nhiên Liệu", TextXAlignment = "Left", TextSize = 17, }) local itemsFuel = { ["Log"] = true, ["Coal"] = true, ["Oil Barrel"] = true, ["Fuel Canister"] = true, ["Cultist"] = true, ["Bear Corpse"] = true, ["Alpha Wolf Corpse"] = true, ["Wolf Corpse"] = true, ["Crossbow Cultist"] = true } local ActiveFuelESP = false local fuelConnections = {} local function addFuelESP(item) if not item:IsA("Model") or not item.PrimaryPart then return end if not item:FindFirstChild("FuelHighlight") then local hl = Instance.new("Highlight") hl.Name = "FuelHighlight" hl.FillColor = Color3.fromRGB(255, 215, 0) hl.OutlineColor = Color3.fromRGB(255, 255, 255) hl.FillTransparency = 0.5 hl.OutlineTransparency = 0 hl.Adornee = item hl.Parent = item.PrimaryPart end if not item:FindFirstChild("FuelBillboard") then local billboard = Instance.new("BillboardGui") billboard.Name = "FuelBillboard" billboard.Adornee = item.PrimaryPart billboard.Size = UDim2.new(0, 200, 0, 50) billboard.StudsOffset = Vector3.new(0, 3, 0) billboard.AlwaysOnTop = true billboard.Parent = item local text = Instance.new("TextLabel") text.Size = UDim2.new(1, 0, 1, 0) text.BackgroundTransparency = 1 text.Text = item.Name text.TextColor3 = Color3.fromRGB(255, 255, 0) text.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) text.TextStrokeTransparency = 0 text.TextSize = 14 text.Font = Enum.Font.SourceSansBold text.Parent = billboard end end local function handleFuelItem(item) if itemsFuel[item.Name] then addFuelESP(item) end end local function setFuelESP(state) ActiveFuelESP = state if state then for _, item in ipairs(workspace.Items:GetChildren()) do handleFuelItem(item) end fuelConnections["childAdded"] = workspace.Items.ChildAdded:Connect(function(item) task.wait(0.2) if ActiveFuelESP then handleFuelItem(item) end end) else for _, item in ipairs(workspace.Items:GetChildren()) do if item:FindFirstChild("FuelHighlight") then item.FuelHighlight:Destroy() end if item:FindFirstChild("FuelBillboard") then item.FuelBillboard:Destroy() end end if fuelConnections["childAdded"] then fuelConnections["childAdded"]:Disconnect() fuelConnections["childAdded"] = nil end end end local ToggleFuelESP = Tab5:Toggle({ Title = "ESP Nhiên Liệu", Desc = "Hiện khung và nhãn tên cho nhiên liệu", Default = false, Callback = function(state) setFuelESP(state) end }) local SectionMetalESP = Tab5:Section({ Title = "Kim Loại", TextXAlignment = "Left", TextSize = 17, }) local ItemsMetal = { ["Bolt"] = true, ["Sheet Metal"] = true, ["UFO Junk"] = true, ["UFO Component"] = true, ["Broken Fan"] = true, ["Broken Radio"] = true, ["Broken Microwave"] = true, ["Tyre"] = true, ["Metal Chair"] = true, ["Old Car Engine"] = true, ["Cultist Experiment"] = true, ["Washing Machine"] = true, ["Cultist Prototype"] = true, ["UFO Scrap"] = true } local ActiveMetalESP = false local metalConnections = {} local function addMetalESP(item) if not item:IsA("Model") or not item.PrimaryPart then return end if not item:FindFirstChild("MetalHighlight") then local hl = Instance.new("Highlight") hl.Name = "MetalHighlight" hl.FillColor = Color3.fromRGB(255, 215, 0) hl.OutlineColor = Color3.fromRGB(255, 255, 255) hl.FillTransparency = 0.5 hl.OutlineTransparency = 0 hl.Adornee = item hl.Parent = item end if not item:FindFirstChild("MetalBillboard") then local billboard = Instance.new("BillboardGui") billboard.Name = "MetalBillboard" billboard.Adornee = item.PrimaryPart billboard.Size = UDim2.new(0, 200, 0, 50) billboard.StudsOffset = Vector3.new(0, 3, 0) billboard.AlwaysOnTop = true billboard.Parent = item local text = Instance.new("TextLabel") text.Size = UDim2.new(1, 0, 1, 0) text.BackgroundTransparency = 1 text.Text = item.Name text.TextColor3 = Color3.fromRGB(255, 0, 0) text.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) text.TextStrokeTransparency = 0 text.TextSize = 14 text.Font = Enum.Font.SourceSansBold text.Parent = billboard end end local function handleMetalItem(item) if ItemsMetal[item.Name] then addMetalESP(item) end end local function setMetalESP(state) ActiveMetalESP = state if state then for _, item in ipairs(workspace.Items:GetChildren()) do handleMetalItem(item) end metalConnections["childAdded"] = workspace.Items.ChildAdded:Connect(function(item) task.wait(0.2) if ActiveMetalESP then handleMetalItem(item) end end) else for _, item in ipairs(workspace.Items:GetChildren()) do if item:FindFirstChild("MetalHighlight") then item.MetalHighlight:Destroy() end if item:FindFirstChild("MetalBillboard") then item.MetalBillboard:Destroy() end end if metalConnections["childAdded"] then metalConnections["childAdded"]:Disconnect() metalConnections["childAdded"] = nil end end end local ToggleMetalESP = Tab5:Toggle({ Title = "ESP Kim Loại", Desc = "Hiện khung và nhãn tên cho kim loại phế liệu", Default = false, Callback = function(state) setMetalESP(state) end }) local SectionFoodESP = Tab5:Section({ Title = "Thức Ăn", TextXAlignment = "Left", TextSize = 17, }) local targetFood = { ["Steak"] = true, ["Carrot"] = true, ["Berry"] = true, ["Chili"] = true, ["Morsel"] = true, ["Stew"] = true, ["Corn"] = true, ["Pumpkin"] = true, ["Apple"] = true, ["Ribs"] = true, ["Cake"] = true, ["Hearty Stew"] = true, ["Shark"] = true, ["Swordfish"] = true, ["Eel"] = true, ["Char"] = true, ["Mackerel"] = true, ["Salmon"] = true, ["Clownfish"] = true, } local ActiveFoodESP = false local foodConnections = {} local function addFoodESP(item) if not item:IsA("Model") or not item.PrimaryPart then return end if not item:FindFirstChild("FoodHighlight") then local hl = Instance.new("Highlight") hl.Name = "FoodHighlight" hl.FillColor = Color3.fromRGB(0, 255, 0) hl.OutlineColor = Color3.fromRGB(0, 0, 0) hl.FillTransparency = 0.5 hl.OutlineTransparency = 0 hl.Adornee = item hl.Parent = item.PrimaryPart end if not item:FindFirstChild("FoodBillboard") then local billboard = Instance.new("BillboardGui") billboard.Name = "FoodBillboard" billboard.Adornee = item.PrimaryPart billboard.Size = UDim2.new(0, 200, 0, 50) billboard.StudsOffset = Vector3.new(0, 3, 0) billboard.AlwaysOnTop = true billboard.Parent = item local text = Instance.new("TextLabel") text.Size = UDim2.new(1, 0, 1, 0) text.BackgroundTransparency = 1 text.Text = item.Name text.TextColor3 = Color3.fromRGB(255, 255, 255) text.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) text.TextStrokeTransparency = 0 text.TextSize = 14 text.Font = Enum.Font.SourceSansBold text.Parent = billboard end end local function handleFoodItem(item) if targetFood[item.Name] then addFoodESP(item) end end local function setFoodESP(state) ActiveFoodESP = state if state then for _, item in ipairs(workspace.Items:GetChildren()) do handleFoodItem(item) end foodConnections["childAdded"] = workspace.Items.ChildAdded:Connect(function(item) task.wait(0.2) if ActiveFoodESP then handleFoodItem(item) end end) else for _, item in ipairs(workspace.Items:GetChildren()) do if item:FindFirstChild("FoodHighlight") then item.FoodHighlight:Destroy() end if item:FindFirstChild("FoodBillboard") then item.FoodBillboard:Destroy() end end if foodConnections["childAdded"] then foodConnections["childAdded"]:Disconnect() foodConnections["childAdded"] = nil end end end local ToggleFoodESP = Tab5:Toggle({ Title = "ESP Thức Ăn", Desc = "Hiện khung và nhãn tên cho thức ăn", Default = false, Callback = function(state) setFoodESP(state) end }) -- ========================================== -- BỔ SUNG ESP BOX & TRACERS CHO NHÂN VẬT -- ========================================== local SectionCharESP = Tab5:Section({ Title = "ESP Nhân Vật / Quái Vật", TextXAlignment = "Left", TextSize = 17, }) local ESP = { BoxEnabled = false, LineEnabled = false, LineOrigin = "Bottom", BoxColor = Color3.fromRGB(255, 0, 0), LineColor = Color3.fromRGB(255, 255, 0), List = {} } local screenGui = Instance.new("ScreenGui") screenGui.Name = "HubESP" screenGui.ResetOnSpawn = false screenGui.Parent = player:WaitForChild("PlayerGui") local function createCharacterESP(char) if char == player.Character then return end if ESP.List[char] then return end local hrpPart = char:WaitForChild("HumanoidRootPart", 5) if not hrpPart then return end local espData = {} -- Bảng vẽ Hộp ESP (Box) local bgui = Instance.new("BillboardGui") bgui.Name = "ESP_Box" bgui.AlwaysOnTop = true bgui.Size = UDim2.new(4, 0, 5.5, 0) bgui.Adornee = hrpPart bgui.Enabled = ESP.BoxEnabled local frame = Instance.new("Frame") frame.Size = UDim2.new(1, 0, 1, 0) frame.BackgroundTransparency = 1 frame.Parent = bgui local stroke = Instance.new("UIStroke") stroke.Color = ESP.BoxColor stroke.Thickness = 1.5 stroke.Parent = frame bgui.Parent = hrpPart espData.Box = bgui espData.Stroke = stroke -- Bảng vẽ Đường kẻ ESP (Tracer Line) local lineFrame = Instance.new("Frame") lineFrame.Name = "ESP_Line_" .. char.Name lineFrame.AnchorPoint = Vector2.new(0.5, 0.5) lineFrame.BorderSizePixel = 0 lineFrame.BackgroundColor3 = ESP.LineColor lineFrame.ZIndex = 10 lineFrame.Visible = false lineFrame.Parent = screenGui espData.Line = lineFrame ESP.List[char] = espData end local function removeCharacterESP(char) local espData = ESP.List[char] if espData then if espData.Box then espData.Box:Destroy() end if espData.Line then espData.Line:Destroy() end ESP.List[char] = nil end end -- Hook các nhân vật hiện tại và tương lai for _, char in ipairs(workspace.Characters:GetChildren()) do task.spawn(function() createCharacterESP(char) end) end workspace.Characters.ChildAdded:Connect(function(char) task.spawn(function() createCharacterESP(char) end) end) workspace.Characters.ChildRemoved:Connect(function(char) removeCharacterESP(char) end) -- Vòng lặp vẽ và cập nhật liên tục ESP (Box & Lines) local camera = workspace.CurrentCamera RunService.RenderStepped:Connect(function() local localHrp = player.Character and player.Character:FindFirstChild("HumanoidRootPart") for char, espData in pairs(ESP.List) do if not char.Parent or not char:FindFirstChild("HumanoidRootPart") then removeCharacterESP(char) else local targetHrp = char.HumanoidRootPart local targetPos, onScreen = camera:WorldToViewportPoint(targetHrp.Position) -- Cập nhật trạng thái và màu sắc Hộp (Box) if espData.Box then espData.Box.Enabled = ESP.BoxEnabled and onScreen espData.Stroke.Color = ESP.BoxColor end -- Cập nhật vị trí Đường kẻ (Tracers) if ESP.LineEnabled and onScreen then local origin2D = Vector2.new(0, 0) local validOrigin = false if ESP.LineOrigin == "Top" then origin2D = Vector2.new(camera.ViewportSize.X / 2, 0) validOrigin = true elseif ESP.LineOrigin == "Center" then origin2D = Vector2.new(camera.ViewportSize.X / 2, camera.ViewportSize.Y / 2) validOrigin = true elseif ESP.LineOrigin == "Bottom" then origin2D = Vector2.new(camera.ViewportSize.X / 2, camera.ViewportSize.Y) validOrigin = true elseif ESP.LineOrigin == "Character" then if localHrp then local localPos, localOnScreen = camera:WorldToViewportPoint(localHrp.Position) origin2D = Vector2.new(localPos.X, localPos.Y) validOrigin = true end end if validOrigin then local target2D = Vector2.new(targetPos.X, targetPos.Y) local dist = (target2D - origin2D).Magnitude local angle = math.deg(math.atan2(target2D.Y - origin2D.Y, target2D.X - origin2D.X)) local center = (origin2D + target2D) / 2 espData.Line.Size = UDim2.new(0, dist, 0, 1.5) espData.Line.Position = UDim2.new(0, center.X, 0, center.Y) espData.Line.Rotation = angle espData.Line.BackgroundColor3 = ESP.LineColor espData.Line.Visible = true else espData.Line.Visible = false end else espData.Line.Visible = false end end end end) local ToggleBoxESP = Tab5:Toggle({ Title = "Hộp ESP (Box)", Desc = "Vẽ hộp chữ nhật bao quanh nhân vật/quái vật", Default = false, Callback = function(state) ESP.BoxEnabled = state for _, espData in pairs(ESP.List) do if espData.Box then espData.Box.Enabled = state end end end }) local ToggleLineESP = Tab5:Toggle({ Title = "Đường Kẻ (Tracers)", Desc = "Vẽ đường thẳng chỉ hướng tới đối tượng", Default = false, Callback = function(state) ESP.LineEnabled = state if not state then for _, espData in pairs(ESP.List) do if espData.Line then espData.Line.Visible = false end end end end }) local DropdownLineOrigin = Tab5:Dropdown({ Title = "Gốc Đường Kẻ (Tracer Origin)", Values = {"Dưới Màn Hình", "Giữa Màn Hình", "Trên Màn Hình", "Nhân Vật Của Bạn"}, Default = "Dưới Màn Hình", Callback = function(option) local originMap = { ["Dưới Màn Hình"] = "Bottom", ["Giữa Màn Hình"] = "Center", ["Trên Màn Hình"] = "Top", ["Nhân Vật Của Bạn"] = "Character" } ESP.LineOrigin = originMap[option] or "Bottom" end }) -- ========================================== -- TAB 6: TÍNH NĂNG KHÁC (Misc) -- ========================================== local SectionFullBright = Tab6:Section({ Title = "Ánh Sáng Toàn Bản Đồ", TextXAlignment = "Left", TextSize = 17, }) local FullBrightConnection local ToggleFullBright = Tab6:Toggle({ Title = "Tăng Độ Sáng (Full Bright)", Desc = "Xóa bỏ sương mù và giữ sáng bản đồ", Default = false, Callback = function(state) if state then FullBrightConnection = RunService.RenderStepped:Connect(function() Lighting.Ambient = Color3.fromRGB(255, 255, 255) Lighting.ColorShift_Bottom = Color3.fromRGB(255, 255, 255) Lighting.ColorShift_Top = Color3.fromRGB(255, 255, 255) Lighting.Brightness = 2 Lighting.ClockTime = 14 Lighting.FogEnd = 1e6 end) else if FullBrightConnection then FullBrightConnection:Disconnect() FullBrightConnection = nil end Lighting.Ambient = Color3.fromRGB(127, 127, 127) Lighting.ColorShift_Bottom = Color3.fromRGB(0, 0, 0) Lighting.ColorShift_Top = Color3.fromRGB(127, 127, 127) Lighting.Brightness = 1 Lighting.ClockTime = 12 Lighting.FogEnd = 1000 end end }) local ButtonTpCampfire = Tab6:Button({ Title = "Dịch Chuyển Về Lửa Trại", Desc = "Di chuyển tức thời đến đống lửa trại chính", Callback = function() local campfire = workspace:FindFirstChild("Map") and workspace.Map:FindFirstChild("Campground") and workspace.Map.Campground:FindFirstChild("MainFire") if hrp and campfire and campfire:IsA("Model") and campfire.PrimaryPart then hrp.CFrame = campfire.PrimaryPart.CFrame + Vector3.new(0, 5, 0) end end }) -- ========================================== -- TAB 7: QUÁI VẬT (Mobs) -- ========================================== local SectionMobs = Tab7:Section({ Title = "Khống Chế Sói / Gấu", TextXAlignment = "Left", TextSize = 17, }) local ButtonAntiWolf = Tab7:Button({ Title = "Bảng Điều Khiển Khóa Sói", Desc = "Mở bảng điều khiển hút và giữ sói/gấu cố định", Locked = false, Callback = function() local CHARACTERS_FOLDER = "Characters" local WOLF_NAME = {"wolf", "Bear"} local HOLD_ABOVE_PLAYER = true local COORD_HOLD = Vector3.new(0, 10, 0) local tracked = {} local enabled = false local function isWolfModel(m) if not m or not m:IsA("Model") then return false end local name = tostring(m.Name):lower() for _, matchName in ipairs(WOLF_NAME) do if string.find(name, matchName:lower(), 1, true) then return true end end return false end local function collectParts(model) local parts = {} for _, d in ipairs(model:GetDescendants()) do if d:IsA("BasePart") then table.insert(parts, d) end end return parts end local function saveOriginalState(model) if tracked[model] then return end local info = {parts = {}, model = model, primaryCFrame = nil} local parts = collectParts(model) for _, p in ipairs(parts) do info.parts[p] = { Anchored = p.Anchored, CanCollide = p.CanCollide, CFrame = p.CFrame } end if model.PrimaryPart then info.primaryCFrame = model:GetPrimaryPartCFrame() end tracked[model] = info end local function restoreModel(model) local info = tracked[model] if not info then return end pcall(function() for part, props in pairs(info.parts) do if part and part.Parent then if props.CFrame then pcall(function() part.CFrame = props.CFrame end) end part.Anchored = props.Anchored part.CanCollide = props.CanCollide end end if info.primaryCFrame and model.PrimaryPart then pcall(function() model:SetPrimaryPartCFrame(info.primaryCFrame) end) end end) tracked[model] = nil end local function setModelCFrame(model, targetCFrame) if not model or not model.Parent then return end pcall(function() if model.PrimaryPart then model:SetPrimaryPartCFrame(targetCFrame) else local parts = collectParts(model) local center = Vector3.new(0,0,0) local n = 0 for _, p in ipairs(parts) do center = center + p.Position n = n + 1 end if n == 0 then return end center = center / n for _, p in ipairs(parts) do local offset = p.Position - center p.CFrame = CFrame.new(targetCFrame.Position + offset) * (p.CFrame - p.CFrame.Position) end end end) end local function neutralizeModel(model) saveOriginalState(model) for part, _ in pairs(tracked[model].parts) do if part and part.Parent then pcall(function() part.Anchored = true part.CanCollide = false end) end end end local function bringAndHoldAll() local targetPos if HOLD_ABOVE_PLAYER and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then targetPos = player.Character.HumanoidRootPart.Position + Vector3.new(0, 10, 0) else targetPos = COORD_HOLD end local charsFolder = workspace:FindFirstChild(CHARACTERS_FOLDER) or workspace for _, m in ipairs(charsFolder:GetChildren()) do if isWolfModel(m) then saveOriginalState(m) neutralizeModel(m) local targetCFrame = CFrame.new(targetPos) setModelCFrame(m, targetCFrame) if tracked[m] then tracked[m].moved = true end end end end local holdConnection local function startHoldLoop() if holdConnection then return end holdConnection = RunService.Heartbeat:Connect(function() if not enabled then return end local basePos if HOLD_ABOVE_PLAYER and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then basePos = player.Character.HumanoidRootPart.Position + Vector3.new(0, 10, 0) else basePos = COORD_HOLD end local charsFolder = workspace:FindFirstChild(CHARACTERS_FOLDER) or workspace for _, m in ipairs(charsFolder:GetChildren()) do if isWolfModel(m) then if not tracked[m] then saveOriginalState(m) for part, _ in pairs(tracked[m].parts) do pcall(function() part.Anchored = true part.CanCollide = false end) end tracked[m].moved = true end local offsetIndex = 0 local hash = math.abs(tonumber(tostring(m:GetDebugId())) or 0) offsetIndex = (hash % 6) - 3 local target = CFrame.new(basePos + Vector3.new(offsetIndex*2, 0, 0)) pcall(function() setModelCFrame(m, target) end) end end end) end local function stopHoldLoop() if holdConnection then holdConnection:Disconnect() holdConnection = nil end end local function releaseAll() for model, _ in pairs(tracked) do pcall(function() restoreModel(model) end) end tracked = {} end local function scanOnce() bringAndHoldAll() end -- TẠO GUI VIỆT HÓA local function createGUI() local screenGuiSub = Instance.new("ScreenGui") screenGuiSub.Name = "AntiWolfBringGUI" screenGuiSub.ResetOnSpawn = false screenGuiSub.Parent = player:WaitForChild("PlayerGui") local main = Instance.new("Frame", screenGuiSub) main.Size = UDim2.new(0, 300, 0, 140) main.Position = UDim2.new(0, 12, 0, 12) main.BackgroundColor3 = Color3.fromRGB(30,30,30) main.BackgroundTransparency = 0.12 main.BorderSizePixel = 0 main.Draggable = true local title = Instance.new("TextLabel", main) title.Size = UDim2.new(1, -12, 0, 28) title.Position = UDim2.new(0, 6, 0, 6) title.BackgroundTransparency = 1 title.Text = "Nexon Anti-Wolf: Hút & Giữ Sói" title.TextColor3 = Color3.new(1,1,1) title.Font = Enum.Font.SourceSansBold title.TextSize = 18 title.TextXAlignment = Enum.TextXAlignment.Left title.Draggable = true local toggleBtn = Instance.new("TextButton", main) toggleBtn.Size = UDim2.new(0, 140, 0, 34) toggleBtn.Position = UDim2.new(0, 6, 0, 40) toggleBtn.Text = "Kích Hoạt" toggleBtn.Font = Enum.Font.SourceSans toggleBtn.TextSize = 16 toggleBtn.BackgroundColor3 = Color3.fromRGB(70,70,70) toggleBtn.TextColor3 = Color3.new(1,1,1) local modeBtn = Instance.new("TextButton", main) modeBtn.Size = UDim2.new(0, 140, 0, 34) modeBtn.Position = UDim2.new(0, 156, 0, 40) modeBtn.Text = HOLD_ABOVE_PLAYER and "Chế độ: Trên Người" or ("Chế độ: " .. tostring(COORD_HOLD)) modeBtn.Font = Enum.Font.SourceSans modeBtn.TextSize = 14 modeBtn.BackgroundColor3 = Color3.fromRGB(70,70,70) modeBtn.TextColor3 = Color3.new(1,1,1) local scanBtn = Instance.new("TextButton", main) scanBtn.Size = UDim2.new(0, 140, 0, 28) scanBtn.Position = UDim2.new(0, 6, 0, 84) scanBtn.Text = "Quét Ngay" scanBtn.Font = Enum.Font.SourceSans scanBtn.TextSize = 14 scanBtn.BackgroundColor3 = Color3.fromRGB(80,80,80) scanBtn.TextColor3 = Color3.new(1,1,1) local releaseBtn = Instance.new("TextButton", main) releaseBtn.Size = UDim2.new(0, 140, 0, 28) releaseBtn.Position = UDim2.new(0, 156, 0, 84) releaseBtn.Text = "Đóng" releaseBtn.Font = Enum.Font.SourceSans releaseBtn.TextSize = 14 releaseBtn.BackgroundColor3 = Color3.fromRGB(80,80,80) releaseBtn.TextColor3 = Color3.new(1,1,1) local infoLabel = Instance.new("TextLabel", main) infoLabel.Size = UDim2.new(1, -12, 0, 18) infoLabel.Position = UDim2.new(0, 6, 1, -24) infoLabel.BackgroundTransparency = 1 infoLabel.Font = Enum.Font.SourceSans infoLabel.TextSize = 12 infoLabel.TextColor3 = Color3.fromRGB(200,200,200) infoLabel.Text = "Lưu ý: Chỉ Client. Server có thể sửa lại vị trí." toggleBtn.MouseButton1Click:Connect(function() enabled = not enabled if enabled then toggleBtn.Text = "Hủy Kích Hoạt" scanOnce() startHoldLoop() game:GetService("StarterGui"):SetCore("SendNotification", { Title = "Anti-Wolf", Text = "Đã BẬT Hút & Giữ Sói", Duration = 2 }) else toggleBtn.Text = "Kích Hoạt" stopHoldLoop() releaseAll() game:GetService("StarterGui"):SetCore("SendNotification", { Title = "Anti-Wolf", Text = "Đã TẮT Hút & Giữ Sói", Duration = 2 }) end end) modeBtn.MouseButton1Click:Connect(function() HOLD_ABOVE_PLAYER = not HOLD_ABOVE_PLAYER modeBtn.Text = HOLD_ABOVE_PLAYER and "Chế độ: Trên Người" or ("Chế độ: " .. tostring(COORD_HOLD)) end) scanBtn.MouseButton1Click:Connect(function() scanOnce() game:GetService("StarterGui"):SetCore("SendNotification", { Title = "Anti-Wolf", Text = "Đã quét sói thủ công", Duration = 1.6 }) end) releaseBtn.MouseButton1Click:Connect(function() main.Visible = false end) end createGUI() local charsFolder = workspace:FindFirstChild(CHARACTERS_FOLDER) or workspace charsFolder.DescendantAdded:Connect(function(desc) if not enabled then return end if desc:IsA("Model") and isWolfModel(desc) then saveOriginalState(desc) neutralizeModel(desc) else local parent = desc.Parent while parent and parent ~= workspace and parent ~= charsFolder do if isWolfModel(parent) then saveOriginalState(parent) neutralizeModel(parent) break end parent = parent.Parent end end end) player.AncestryChanged:Connect(function(_, parent) if not parent then stopHoldLoop() releaseAll() end end) print("[AntiWolfBring] Đã tải thành công.") end })