-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] --[[ tdi_ultimate_suite_v4.lua Total Drama Island — Ultimate Suite + Chest ESP Features: - Chest ESP (Gold highlights on chests/treasure/loot) - Desync Ghost Mode - Invisibility (Client-side) - Player ESP - WalkSpeed & JumpPower - Whisper Spy --]] local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UIS = game:GetService("UserInputService") local CoreGui = game:GetService("CoreGui") local TextChatService = game:GetService("TextChatService") local LP = Players.LocalPlayer local Camera = workspace.CurrentCamera local CFG = { invis = false, esp = true, chestESP = true, ghostMode = false, speedEnabled = false, speedValue = 16, jumpEnabled = false, jumpValue = 50, } local highlights = {} local chestHighlights = {} local ghostClone = nil local ghostConnection = nil local originalCFrame = nil -- ============================================================ -- DESYNC GHOST LOGIC -- ============================================================ local function toggleGhostMode() if CFG.ghostMode then if not LP.Character or not LP.Character:FindFirstChild("HumanoidRootPart") then return end originalCFrame = LP.Character.HumanoidRootPart.CFrame LP.Character.HumanoidRootPart.CFrame = CFrame.new(100000, 100000, 100000) LP.Character.HumanoidRootPart.Anchored = true ghostClone = LP.Character:Clone() ghostClone.Name = "GhostClone" for _, v in pairs(ghostClone:GetDescendants()) do if v:IsA("BaseScript") or v:IsA("LocalScript") then v:Destroy() end end ghostClone.Parent = workspace for _, v in pairs(ghostClone:GetDescendants()) do if v:IsA("BasePart") then v.CanCollide = false v.Anchored = false end end local cloneHum = ghostClone:FindFirstChildOfClass("Humanoid") if cloneHum then Camera.CameraSubject = cloneHum end ghostConnection = RunService.RenderStepped:Connect(function() if not ghostClone or not ghostClone.PrimaryPart then return end local moveDir = Vector3.new() if UIS:IsKeyDown(Enum.KeyCode.W) then moveDir += Camera.CFrame.LookVector end if UIS:IsKeyDown(Enum.KeyCode.S) then moveDir -= Camera.CFrame.LookVector end if UIS:IsKeyDown(Enum.KeyCode.A) then moveDir -= Camera.CFrame.RightVector end if UIS:IsKeyDown(Enum.KeyCode.D) then moveDir += Camera.CFrame.RightVector end local speed = CFG.speedEnabled and CFG.speedValue or 16 ghostClone.HumanoidRootPart.CFrame = ghostClone.HumanoidRootPart.CFrame + (moveDir * speed * 0.033) ghostClone.HumanoidRootPart.CFrame = CFrame.new(ghostClone.HumanoidRootPart.Position, ghostClone.HumanoidRootPart.Position + Camera.CFrame.LookVector) end) else if ghostConnection then ghostConnection:Disconnect() ghostConnection = nil end if LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") then LP.Character.HumanoidRootPart.Anchored = false if ghostClone and ghostClone:FindFirstChild("HumanoidRootPart") then LP.Character.HumanoidRootPart.CFrame = ghostClone.HumanoidRootPart.CFrame elseif originalCFrame then LP.Character.HumanoidRootPart.CFrame = originalCFrame end end if ghostClone then ghostClone:Destroy() ghostClone = nil end if LP.Character and LP.Character:FindFirstChildOfClass("Humanoid") then Camera.CameraSubject = LP.Character.Humanoid end end end LP.CharacterAdded:Connect(function() if CFG.ghostMode then CFG.ghostMode = false if ghostConnection then ghostConnection:Disconnect() ghostConnection = nil end if ghostClone then ghostClone:Destroy() ghostClone = nil end Camera.CameraSubject = LP.Character:WaitForChild("Humanoid") end end) -- ============================================================ -- INVIS, SPEED, JUMP LOOP -- ============================================================ RunService.Stepped:Connect(function() if not LP.Character then return end local hum = LP.Character:FindFirstChildOfClass("Humanoid") if hum then if CFG.speedEnabled then hum.WalkSpeed = CFG.speedValue else hum.WalkSpeed = 16 end if CFG.jumpEnabled then hum.UseJumpPower = true; hum.JumpPower = CFG.jumpValue else hum.JumpPower = 50 end end for _, v in pairs(LP.Character:GetDescendants()) do if v:IsA("BasePart") then v.LocalTransparencyModifier = CFG.invis and 1 or 0 elseif v:IsA("Decal") then v.Transparency = CFG.invis and 1 or 0 end end end) -- ============================================================ -- ESP LOOPS (Players + Chests) -- ============================================================ task.spawn(function() while true do task.wait(1) -- Player ESP for plr, hl in pairs(highlights) do if not plr.Character or not plr.Character:FindFirstChild("HumanoidRootPart") then hl:Destroy() highlights[plr] = nil end end if CFG.esp then for _, plr in ipairs(Players:GetPlayers()) do if plr ~= LP and plr.Character and plr.Character:FindFirstChild("HumanoidRootPart") then if not highlights[plr] then local hl = Instance.new("Highlight") hl.FillColor = Color3.fromRGB(255, 50, 50) hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop hl.Adornee = plr.Character hl.Parent = plr.Character highlights[plr] = hl end end end else for _, hl in pairs(highlights) do hl:Destroy() end highlights = {} end -- Chest ESP for obj, hl in pairs(chestHighlights) do if not obj.Parent then hl:Destroy() chestHighlights[obj] = nil end end if CFG.chestESP then for _, v in pairs(workspace:GetDescendants()) do if (v:IsA("Model") or v:IsA("BasePart")) and not chestHighlights[v] then local name = string.lower(v.Name) if name:find("chest") or name:find("treasure") or name:find("loot") or name:find("crate") then local hl = Instance.new("Highlight") hl.FillColor = Color3.fromRGB(255, 215, 0) -- Gold hl.FillTransparency = 0.3 hl.OutlineColor = Color3.fromRGB(255, 255, 255) hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop hl.Adornee = v hl.Parent = v chestHighlights[v] = hl end end end else for _, hl in pairs(chestHighlights) do hl:Destroy() end chestHighlights = {} end end end) -- ============================================================ -- GUI -- ============================================================ local function makeGUI() local old = CoreGui:FindFirstChild("TDI_Ultimate") if old then old:Destroy() end local sg = Instance.new("ScreenGui") sg.Name = "TDI_Ultimate" sg.ResetOnSpawn = false sg.Parent = CoreGui local main = Instance.new("Frame") main.Size = UDim2.new(0, 260, 0, 470) main.Position = UDim2.new(0.5, -130, 0.5, -235) main.BackgroundColor3 = Color3.fromRGB(20, 20, 26) main.BorderSizePixel = 0 main.Active = true main.ClipsDescendants = true main.Parent = sg Instance.new("UICorner", main).CornerRadius = UDim.new(0, 10) local st = Instance.new("UIStroke", main) st.Color = Color3.fromRGB(255, 100, 150) st.Thickness = 1.5 -- Drag local dragging, dStart, sPos main.InputBegan:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then dragging = true; dStart = i.Position; sPos = main.Position end end) UIS.InputChanged:Connect(function(i) if not dragging then return end if i.UserInputType == Enum.UserInputType.MouseMovement or i.UserInputType == Enum.UserInputType.Touch then local d = i.Position - dStart main.Position = UDim2.new(0, sPos.X.Offset + d.X, 0, sPos.Y.Offset + d.Y) end end) UIS.InputEnded:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then dragging = false end end) -- Title Bar local title = Instance.new("TextLabel") title.Size = UDim2.new(1, 0, 0, 32) title.BackgroundColor3 = Color3.fromRGB(50, 20, 35) title.BorderSizePixel = 0 title.Text = " TDI Ultimate v4" title.TextColor3 = Color3.fromRGB(255, 180, 200) title.Font = Enum.Font.GothamBold title.TextSize = 13 title.TextXAlignment = Enum.TextXAlignment.Left title.Parent = main Instance.new("UICorner", title).CornerRadius = UDim.new(0, 10) -- Minimize Button local minBtn = Instance.new("TextButton") minBtn.Size = UDim2.new(0, 26, 0, 26) minBtn.Position = UDim2.new(1, -60, 0, 3) minBtn.BackgroundColor3 = Color3.fromRGB(80, 80, 110) minBtn.BorderSizePixel = 0 minBtn.Text = "–" minBtn.TextColor3 = Color3.fromRGB(255,255,255) minBtn.Font = Enum.Font.GothamBold minBtn.TextSize = 18 minBtn.Parent = title Instance.new("UICorner", minBtn).CornerRadius = UDim.new(0, 5) -- Close Button local close = Instance.new("TextButton") close.Size = UDim2.new(0, 26, 0, 26) close.Position = UDim2.new(1, -30, 0, 3) close.BackgroundColor3 = Color3.fromRGB(180, 50, 70) close.BorderSizePixel = 0 close.Text = "×" close.TextColor3 = Color3.fromRGB(255,255,255) close.Font = Enum.Font.GothamBold close.TextSize = 18 close.Parent = title Instance.new("UICorner", close).CornerRadius = UDim.new(0, 5) close.MouseButton1Click:Connect(function() if CFG.ghostMode then CFG.ghostMode = false; toggleGhostMode() end sg:Destroy() end) -- Minimize Logic local minimized = false minBtn.MouseButton1Click:Connect(function() minimized = not minimized if minimized then main.Size = UDim2.new(0, 260, 0, 32) minBtn.Text = "+" else main.Size = UDim2.new(0, 260, 0, 470) minBtn.Text = "–" end end) -- Main Content local body = Instance.new("ScrollingFrame") body.Size = UDim2.new(1, -16, 1, -40) body.Position = UDim2.new(0, 8, 0, 36) body.BackgroundTransparency = 1 body.BorderSizePixel = 0 body.CanvasSize = UDim2.new(0, 0, 0, 600) body.ScrollBarThickness = 3 body.Parent = main local layout = Instance.new("UIListLayout", body) layout.Padding = UDim.new(0, 4) layout.SortOrder = Enum.SortOrder.LayoutOrder local y = 1 local function toggle(name, key, func) local b = Instance.new("TextButton") b.Size = UDim2.new(1, 0, 0, 28) b.BackgroundColor3 = Color3.fromRGB(30, 30, 40) b.BorderSizePixel = 0 b.Text = name .. ": " .. (CFG[key] and "ON" or "OFF") b.TextColor3 = CFG[key] and Color3.fromRGB(150, 255, 150) or Color3.fromRGB(200, 200, 210) b.Font = Enum.Font.Gotham b.TextSize = 12 b.LayoutOrder = y b.Parent = body Instance.new("UICorner", b).CornerRadius = UDim.new(0, 6) b.MouseButton1Click:Connect(function() CFG[key] = not CFG[key] b.Text = name .. ": " .. (CFG[key] and "ON" or "OFF") b.TextColor3 = CFG[key] and Color3.fromRGB(150, 255, 150) or Color3.fromRGB(200, 200, 210) if func then func() end end) y += 1 end toggle("Invisibility (Local)", "invis") toggle("Player ESP", "esp") toggle("Chest ESP (Gold)", "chestESP") -- Ghost Mode Button local ghostBtn = Instance.new("TextButton") ghostBtn.Size = UDim2.new(1, 0, 0, 28) ghostBtn.BackgroundColor3 = Color3.fromRGB(50, 20, 30) ghostBtn.BorderSizePixel = 0 ghostBtn.Text = "DESYNC GHOST: OFF" ghostBtn.TextColor3 = Color3.fromRGB(255, 100, 100) ghostBtn.Font = Enum.Font.GothamBold ghostBtn.TextSize = 12 ghostBtn.LayoutOrder = y ghostBtn.Parent = body Instance.new("UICorner", ghostBtn).CornerRadius = UDim.new(0, 6) ghostBtn.MouseButton1Click:Connect(function() CFG.ghostMode = not CFG.ghostMode if CFG.ghostMode then ghostBtn.Text = "DESYNC GHOST: ACTIVE" ghostBtn.TextColor3 = Color3.fromRGB(150, 255, 150) ghostBtn.BackgroundColor3 = Color3.fromRGB(20, 50, 30) else ghostBtn.Text = "DESYNC GHOST: OFF" ghostBtn.TextColor3 = Color3.fromRGB(255, 100, 100) ghostBtn.BackgroundColor3 = Color3.fromRGB(50, 20, 30) end toggleGhostMode() end) y += 1 -- Speed Input Box local spFrame = Instance.new("Frame") spFrame.Size = UDim2.new(1, 0, 0, 28) spFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 40) spFrame.BorderSizePixel = 0 spFrame.LayoutOrder = y spFrame.Parent = body Instance.new("UICorner", spFrame).CornerRadius = UDim.new(0, 6) y += 1 local spToggle = Instance.new("TextButton") spToggle.Size = UDim2.new(0.6, 0, 1, 0) spToggle.BackgroundTransparency = 1 spToggle.Text = "WalkSpeed: " .. (CFG.speedEnabled and "ON" or "OFF") spToggle.TextColor3 = CFG.speedEnabled and Color3.fromRGB(150, 255, 150) or Color3.fromRGB(200, 200, 210) spToggle.Font = Enum.Font.Gotham spToggle.TextSize = 12 spToggle.Parent = spFrame spToggle.MouseButton1Click:Connect(function() CFG.speedEnabled = not CFG.speedEnabled spToggle.Text = "WalkSpeed: " .. (CFG.speedEnabled and "ON" or "OFF") spToggle.TextColor3 = CFG.speedEnabled and Color3.fromRGB(150, 255, 150) or Color3.fromRGB(200, 200, 210) end) local spBox = Instance.new("TextBox") spBox.Size = UDim2.new(0.3, 0, 0.8, 0) spBox.Position = UDim2.new(0.65, 0, 0.1, 0) spBox.BackgroundColor3 = Color3.fromRGB(20, 20, 26) spBox.BorderSizePixel = 0 spBox.Text = tostring(CFG.speedValue) spBox.TextColor3 = Color3.fromRGB(255, 255, 255) spBox.Font = Enum.Font.Gotham spBox.TextSize = 12 spBox.Parent = spFrame Instance.new("UICorner", spBox).CornerRadius = UDim.new(0, 4) spBox:GetPropertyChangedSignal("Text"):Connect(function() local num = tonumber(spBox.Text) if num then CFG.speedValue = num end end) -- Jump Input Box local jpFrame = Instance.new("Frame") jpFrame.Size = UDim2.new(1, 0, 0, 28) jpFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 40) jpFrame.BorderSizePixel = 0 jpFrame.LayoutOrder = y jpFrame.Parent = body Instance.new("UICorner", jpFrame).CornerRadius = UDim.new(0, 6) y += 1 local jpToggle = Instance.new("TextButton") jpToggle.Size = UDim2.new(0.6, 0, 1, 0) jpToggle.BackgroundTransparency = 1 jpToggle.Text = "JumpPower: " .. (CFG.jumpEnabled and "ON" or "OFF") jpToggle.TextColor3 = CFG.jumpEnabled and Color3.fromRGB(150, 255, 150) or Color3.fromRGB(200, 200, 210) jpToggle.Font = Enum.Font.Gotham jpToggle.TextSize = 12 jpToggle.Parent = jpFrame jpToggle.MouseButton1Click:Connect(function() CFG.jumpEnabled = not CFG.jumpEnabled jpToggle.Text = "JumpPower: " .. (CFG.jumpEnabled and "ON" or "OFF") jpToggle.TextColor3 = CFG.jumpEnabled and Color3.fromRGB(150, 255, 150) or Color3.fromRGB(200, 200, 210) end) local jpBox = Instance.new("TextBox") jpBox.Size = UDim2.new(0.3, 0, 0.8, 0) jpBox.Position = UDim2.new(0.65, 0, 0.1, 0) jpBox.BackgroundColor3 = Color3.fromRGB(20, 20, 26) jpBox.BorderSizePixel = 0 jpBox.Text = tostring(CFG.jumpValue) jpBox.TextColor3 = Color3.fromRGB(255, 255, 255) jpBox.Font = Enum.Font.Gotham jpBox.TextSize = 12 jpBox.Parent = jpFrame Instance.new("UICorner", jpBox).CornerRadius = UDim.new(0, 4) jpBox:GetPropertyChangedSignal("Text"):Connect(function() local num = tonumber(jpBox.Text) if num then CFG.jumpValue = num end end) -- Whisper Spy Section local spyTitle = Instance.new("TextLabel") spyTitle.Size = UDim2.new(1, 0, 0, 24) spyTitle.BackgroundTransparency = 1 spyTitle.Text = "WHISPER SPY" spyTitle.TextColor3 = Color3.fromRGB(150, 110, 220) spyTitle.Font = Enum.Font.GothamBold spyTitle.TextSize = 12 spyTitle.TextXAlignment = Enum.TextXAlignment.Left spyTitle.LayoutOrder = y spyTitle.Parent = body y += 1 local spyLog = Instance.new("ScrollingFrame") spyLog.Size = UDim2.new(1, 0, 0, 120) spyLog.BackgroundColor3 = Color3.fromRGB(15, 15, 20) spyLog.BorderSizePixel = 0 spyLog.CanvasSize = UDim2.new(0, 0, 0, 0) spyLog.ScrollBarThickness = 2 spyLog.LayoutOrder = y spyLog.Parent = body Instance.new("UICorner", spyLog).CornerRadius = UDim.new(0, 6) local spyLayout = Instance.new("UIListLayout", spyLog) spyLayout.Padding = UDim.new(0, 2) spyLayout.SortOrder = Enum.SortOrder.LayoutOrder local function addSpyLog(sender, message) local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, -4, 0, 20) lbl.BackgroundTransparency = 1 lbl.Text = string.format("[W] %s: %s", sender, message) lbl.TextColor3 = Color3.fromRGB(255, 150, 180) lbl.Font = Enum.Font.Gotham lbl.TextSize = 11 lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.TextTruncate = Enum.TextTruncate.AtEnd lbl.LayoutOrder = #spyLog:GetChildren() lbl.Parent = spyLog spyLog.CanvasSize = UDim2.new(0, 0, 0, spyLayout.AbsoluteContentSize.Y + 4) spyLog.CanvasPosition = Vector2.new(0, spyLog.CanvasSize.Y.Offset) end -- Hook Whisper Chat if TextChatService.ChatVersion == Enum.ChatVersion.TextChatService then local general = TextChatService:FindFirstChild("TextChannels") and TextChatService.TextChannels:FindFirstChild("RBXGeneral") if general then local oldSend = general.SendAsync general.SendAsync = function(self, text) if string.sub(text, 1, 2):lower() == "/w" then local parts = string.split(text, " ") if #parts >= 3 then local target = parts[2] local msg = table.concat(parts, " ", 3) addSpyLog("You -> " .. target, msg) end end return oldSend(self, text) end end end end makeGUI() print("[TDI Ultimate v4] loaded with Chest ESP.")