-- Water Menu GUI with 40 OP Water Mods local Players = game:GetService("Players") local TweenService = game:GetService("TweenService") local RunService = game:GetService("RunService") local player = Players.LocalPlayer -- Table of all 40 water mod functions local waterMods = {} -- Helper function: get player's position or default local function getPlayerPos(offset) offset = offset or Vector3.new(0, 5, 10) if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then return player.Character.HumanoidRootPart.Position + offset else return workspace.Baseplate.Position + Vector3.new(0,5,0) end end -- 1 Tall Water Tower waterMods["🏰 Tall Water Tower"] = function() local pos = getPlayerPos() workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(4,30,4), Enum.Material.Water) end -- 2 Water Car waterMods["🚗 Water Car"] = function() local pos = getPlayerPos() local car = Instance.new("Part") car.Name = "WaterCar" car.Size = Vector3.new(8, 2, 4) car.CFrame = CFrame.new(pos) * CFrame.new(0, 1, 0) car.Anchored = false car.Material = Enum.Material.Water car.Color = Color3.fromRGB(50, 150, 255) car.CanCollide = true car.Parent = workspace local bodyVel = Instance.new("BodyVelocity") bodyVel.Velocity = player.Character and player.Character.HumanoidRootPart.CFrame.LookVector * 50 or Vector3.new(0,0,50) bodyVel.MaxForce = Vector3.new(1e5,1e5,1e5) bodyVel.Parent = car -- Auto destroy after 20 seconds delay(20, function() if car then car:Destroy() end end) end -- 3 Water Fountain (Fixed) waterMods["⛲ Water Fountain"] = function() local pos = getPlayerPos() local fountain = Instance.new("Part") fountain.Name = "WaterFountain" fountain.Size = Vector3.new(2, 4, 2) fountain.CFrame = CFrame.new(pos) fountain.Anchored = true fountain.Material = Enum.Material.Water fountain.Color = Color3.fromRGB(120,180,255) fountain.Transparency = 0.4 fountain.Parent = workspace local emitter = Instance.new("ParticleEmitter") emitter.Texture = "rbxassetid://243660364" -- water splash texture emitter.Rate = 50 emitter.Lifetime = NumberRange.new(1) emitter.Speed = NumberRange.new(5) emitter.Parent = fountain delay(15, function() if fountain then fountain:Destroy() end end) end -- 4 Water Pool waterMods["🏊 Water Pool"] = function() local pos = getPlayerPos(Vector3.new(0,-1,0)) workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(20,3,20), Enum.Material.Water) end -- 5 Water Wave waterMods["🌊 Water Wave"] = function() local pos = getPlayerPos() local wave = Instance.new("Part") wave.Size = Vector3.new(30, 1, 10) wave.CFrame = CFrame.new(pos) * CFrame.new(0, 0, 15) wave.Anchored = true wave.Material = Enum.Material.Water wave.Color = Color3.fromRGB(50, 100, 255) wave.Transparency = 0.3 wave.Parent = workspace delay(10, function() if wave then wave:Destroy() end end) end -- 6 Waterfall waterMods["💧 Waterfall"] = function() local pos = getPlayerPos() workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(4, 15, 2), Enum.Material.Water) end -- 7 Water Tunnel waterMods["🚇 Water Tunnel"] = function() local pos = getPlayerPos() workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(10, 5, 5), Enum.Material.Water) end -- 8 Water Dome waterMods["🛡️ Water Dome"] = function() local pos = getPlayerPos() workspace.Terrain:FillBall(pos, 10, Enum.Material.Water) end -- 9 Water Cube waterMods["🟦 Water Cube"] = function() local pos = getPlayerPos() workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(10,10,10), Enum.Material.Water) end -- 10 Water Bridge waterMods["🌉 Water Bridge"] = function() local pos = getPlayerPos() workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(25, 2, 5), Enum.Material.Water) end -- 11 Water Pillar waterMods["🏛️ Water Pillar"] = function() local pos = getPlayerPos() workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(2,20,2), Enum.Material.Water) end -- 12 Water Slide waterMods["🎢 Water Slide"] = function() local pos = getPlayerPos() local slide = Instance.new("Part") slide.Size = Vector3.new(10, 1, 30) slide.CFrame = CFrame.new(pos) * CFrame.Angles(0,0,math.rad(-30)) slide.Anchored = true slide.Material = Enum.Material.Water slide.Color = Color3.fromRGB(100,150,255) slide.Transparency = 0.4 slide.Parent = workspace delay(20, function() if slide then slide:Destroy() end end) end -- 13 Water Maze waterMods["🌀 Water Maze"] = function() local pos = getPlayerPos() workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(40,5,40), Enum.Material.Water) end -- 14 Water Cannon waterMods["🚿 Water Cannon"] = function() local pos = getPlayerPos() local cannon = Instance.new("Part") cannon.Size = Vector3.new(3,3,6) cannon.CFrame = CFrame.new(pos) * CFrame.Angles(0, math.rad(90), 0) cannon.Anchored = true cannon.Material = Enum.Material.Water cannon.Color = Color3.fromRGB(80, 160, 255) cannon.Transparency = 0.2 cannon.Parent = workspace local particle = Instance.new("ParticleEmitter") particle.Texture = "rbxassetid://243660364" particle.Speed = NumberRange.new(30) particle.Lifetime = NumberRange.new(0.5) particle.Rate = 150 particle.Parent = cannon delay(10, function() if cannon then cannon:Destroy() end end) end -- 15 Water Wave Wall waterMods["🌊 Water Wave Wall"] = function() local pos = getPlayerPos() workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(25, 10, 2), Enum.Material.Water) end -- 16 Water Tower Explosion waterMods["💥 Water Tower Explosion"] = function() local pos = getPlayerPos() workspace.Terrain:FillBall(pos, 12, Enum.Material.Water) end -- 17 Water Platform waterMods["🛖 Water Platform"] = function() local pos = getPlayerPos() workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(15,1,15), Enum.Material.Water) end -- 18 Water Balloon waterMods["🎈 Water Balloon"] = function() local pos = getPlayerPos() workspace.Terrain:FillBall(pos + Vector3.new(0, 10, 0), 5, Enum.Material.Water) end -- 19 Water Rapids waterMods["🏞️ Water Rapids"] = function() local pos = getPlayerPos() workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(20,3,10), Enum.Material.Water) end -- 20 Water Pond waterMods["🦆 Water Pond"] = function() local pos = getPlayerPos() workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(12,3,12), Enum.Material.Water) end -- 21 Water Geyser waterMods["🌋 Water Geyser"] = function() local pos = getPlayerPos() local geyser = Instance.new("Part") geyser.Size = Vector3.new(4,15,4) geyser.CFrame = CFrame.new(pos) geyser.Anchored = true geyser.Material = Enum.Material.Water geyser.Color = Color3.fromRGB(120,200,255) geyser.Transparency = 0.3 geyser.Parent = workspace local emitter = Instance.new("ParticleEmitter") emitter.Texture = "rbxassetid://243660364" emitter.Rate = 80 emitter.Lifetime = NumberRange.new(1) emitter.Speed = NumberRange.new(20) emitter.Parent = geyser delay(20, function() if geyser then geyser:Destroy() end end) end -- 22 Water River waterMods["🏞️ Water River"] = function() local pos = getPlayerPos() workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(40,5,10), Enum.Material.Water) end -- 23 Water Sphere waterMods["⚪ Water Sphere"] = function() local pos = getPlayerPos() workspace.Terrain:FillBall(pos, 15, Enum.Material.Water) end -- 24 Water Jetpack waterMods["🚀 Water Jetpack"] = function() local hrp = player.Character and player.Character:FindFirstChild("HumanoidRootPart") if not hrp then return end local jetpack = Instance.new("BodyVelocity") jetpack.Velocity = Vector3.new(0, 100, 0) jetpack.MaxForce = Vector3.new(0, 1e5, 0) jetpack.Parent = hrp delay(3, function() jetpack:Destroy() end) end -- 25 Water Shield waterMods["🛡️ Water Shield"] = function() local hrp = player.Character and player.Character:FindFirstChild("HumanoidRootPart") if not hrp then return end local shield = Instance.new("Part") shield.Name = "WaterShield" shield.Size = Vector3.new(8, 8, 1) shield.CFrame = hrp.CFrame * CFrame.new(0, 0, -5) shield.Anchored = true shield.Transparency = 0.6 shield.Material = Enum.Material.Water shield.Color = Color3.fromRGB(60, 120, 255) shield.Parent = workspace delay(15, function() if shield then shield:Destroy() end end) end -- 26 Water Pillars Rain waterMods["🌧️ Water Pillars Rain"] = function() local pos = getPlayerPos(Vector3.new(0, 50, 0)) for i=1,15 do local pillarPos = pos + Vector3.new(math.random(-20,20), 0, math.random(-20,20)) workspace.Terrain:FillBlock(CFrame.new(pillarPos), Vector3.new(2,15,2), Enum.Material.Water) end end -- 27 Water Wave Surge waterMods["🌊 Water Wave Surge"] = function() local pos = getPlayerPos() workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(30,8,8), Enum.Material.Water) end -- 28 Water Column waterMods["🏛️ Water Column"] = function() local pos = getPlayerPos() workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(3,20,3), Enum.Material.Water) end -- 29 Water Blob waterMods["💧 Water Blob"] = function() local pos = getPlayerPos() workspace.Terrain:FillBall(pos + Vector3.new(0,5,0), 7, Enum.Material.Water) end -- 30 Water Bubble waterMods["🔵 Water Bubble"] = function() local pos = getPlayerPos() workspace.Terrain:FillBall(pos + Vector3.new(0, 8, 0), 10, Enum.Material.Water) end -- 31 Water Spiral (New) waterMods["🌀 Water Spiral"] = function() local basePos = getPlayerPos() for i=1,10 do local angle = i * math.rad(36) local offset = Vector3.new(math.cos(angle)*i*2, i*2, math.sin(angle)*i*2) workspace.Terrain:FillBall(basePos + offset, 2, Enum.Material.Water) end end -- 32 Water Wall waterMods["🧱 Water Wall"] = function() local pos = getPlayerPos() workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(20, 15, 2), Enum.Material.Water) end -- 33 Water Pillar Cluster waterMods["🌳 Water Pillar Cluster"] = function() local basePos = getPlayerPos() for x = -5,5,5 do for z = -5,5,5 do workspace.Terrain:FillBlock(CFrame.new(basePos + Vector3.new(x,0,z)), Vector3.new(2,15,2), Enum.Material.Water) end end end -- 34 Water Sphere Cluster waterMods["⚪ Water Sphere Cluster"] = function() local basePos = getPlayerPos() for i=1,5 do local offset = Vector3.new(math.random(-10,10), math.random(0,10), math.random(-10,10)) workspace.Terrain:FillBall(basePos + offset, 4, Enum.Material.Water) end end -- 35 Water Ring waterMods["⭕ Water Ring"] = function() local basePos = getPlayerPos() for i=1,20 do local angle = math.rad(i*18) local offset = Vector3.new(math.cos(angle)*15, 0, math.sin(angle)*15) workspace.Terrain:FillBall(basePos + offset, 2, Enum.Material.Water) end end -- 36 Water Slide Ramp waterMods["🛷 Water Slide Ramp"] = function() local pos = getPlayerPos() local slide = Instance.new("Part") slide.Size = Vector3.new(12, 1, 35) slide.CFrame = CFrame.new(pos) * CFrame.Angles(0,0,math.rad(-40)) slide.Anchored = true slide.Material = Enum.Material.Water slide.Color = Color3.fromRGB(90,160,255) slide.Transparency = 0.5 slide.Parent = workspace delay(20, function() if slide then slide:Destroy() end end) end -- 37 Water Column Rain waterMods["🌧️ Water Column Rain"] = function() local basePos = getPlayerPos(Vector3.new(0,50,0)) for i=1,12 do local offset = Vector3.new(math.random(-15,15), 0, math.random(-15,15)) workspace.Terrain:FillBlock(CFrame.new(basePos + offset), Vector3.new(2,20,2), Enum.Material.Water) end end -- 38 Water Wave Explosion waterMods["💥 Water Wave Explosion"] = function() local pos = getPlayerPos() workspace.Terrain:FillBall(pos, 20, Enum.Material.Water) end -- 39 Water Floor waterMods["🛤️ Water Floor"] = function() local pos = getPlayerPos() workspace.Terrain:FillBlock(CFrame.new(pos), Vector3.new(40, 1, 40), Enum.Material.Water) end -- 40 Water Bubble Cluster waterMods["🔵 Water Bubble Cluster"] = function() local pos = getPlayerPos() for i=1,7 do local offset = Vector3.new(math.random(-10,10), math.random(5,15), math.random(-10,10)) workspace.Terrain:FillBall(pos + offset, 5, Enum.Material.Water) end end -- Create ScreenGui local screenGui = Instance.new("ScreenGui") screenGui.Name = "WaterMenuGui" screenGui.ResetOnSpawn = false screenGui.Parent = player:WaitForChild("PlayerGui") -- Main frame local mainFrame = Instance.new("Frame") mainFrame.Name = "MainFrame" mainFrame.Size = UDim2.new(0, 320, 0, 450) mainFrame.Position = UDim2.new(0.5, -160, 0.5, -225) mainFrame.BackgroundColor3 = Color3.fromRGB(20, 60, 180) mainFrame.BackgroundTransparency = 0.15 mainFrame.BorderSizePixel = 0 mainFrame.AnchorPoint = Vector2.new(0.5, 0.5) mainFrame.Parent = screenGui mainFrame.ClipsDescendants = true mainFrame.Visible = false -- Rounded corners local uicorner = Instance.new("UICorner") uicorner.CornerRadius = UDim.new(0, 14) uicorner.Parent = mainFrame -- Title local title = Instance.new("TextLabel") title.Name = "Title" title.Size = UDim2.new(1, 0, 0, 45) title.BackgroundTransparency = 1 title.Text = "💧 Water Menu" title.Font = Enum.Font.GothamBold title.TextSize = 26 title.TextColor3 = Color3.fromRGB(220, 240, 255) title.Parent = mainFrame -- Close button local closeBtn = Instance.new("TextButton") closeBtn.Name = "CloseBtn" closeBtn.Text = "✕" closeBtn.Font = Enum.Font.GothamBold closeBtn.TextSize = 24 closeBtn.TextColor3 = Color3.fromRGB(255, 100, 100) closeBtn.BackgroundTransparency = 1 closeBtn.Size = UDim2.new(0, 40, 0, 40) closeBtn.Position = UDim2.new(1, -45, 0, 5) closeBtn.Parent = mainFrame closeBtn.MouseButton1Click:Connect(function() mainFrame.Visible = false end) -- Scrolling frame for buttons local scrollFrame = Instance.new("ScrollingFrame") scrollFrame.Name = "ScrollFrame" scrollFrame.Size = UDim2.new(1, -20, 1, -60) scrollFrame.Position = UDim2.new(0, 10, 0, 50) scrollFrame.CanvasSize = UDim2.new(0, 0, 0, 0) scrollFrame.ScrollBarThickness = 6 scrollFrame.BackgroundTransparency = 1 scrollFrame.Parent = mainFrame local layout = Instance.new("UIListLayout") layout.Parent = scrollFrame layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Padding = UDim.new(0, 6) -- Function to create a mod button local function createModButton(modName, modFunction) local btn = Instance.new("TextButton") btn.Name = modName:gsub("%s", "") .. "Btn" btn.Size = UDim2.new(1, 0, 0, 45) btn.BackgroundColor3 = Color3.fromRGB(40, 120, 220) btn.TextColor3 = Color3.fromRGB(230, 250, 255) btn.Font = Enum.Font.GothamSemibold btn.TextSize = 20 btn.Text = modName btn.AutoButtonColor = true btn.ClipsDescendants = true local btnCorner = Instance.new("UICorner") btnCorner.CornerRadius = UDim.new(0, 8) btnCorner.Parent = btn -- Hover Tween btn.MouseEnter:Connect(function() TweenService:Create(btn, TweenInfo.new(0.15), {BackgroundColor3 = Color3.fromRGB(60,160,255)}):Play() end) btn.MouseLeave:Connect(function() TweenService:Create(btn, TweenInfo.new(0.25), {BackgroundColor3 = Color3.fromRGB(40,120,220)}):Play() end) btn.MouseButton1Click:Connect(function() spawn(function() modFunction() end) end) btn.Parent = scrollFrame end -- Add buttons for all water mods for modName, modFunc in pairs(waterMods) do createModButton(modName, modFunc) end -- Adjust canvas size dynamically layout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() scrollFrame.CanvasSize = UDim2.new(0, 0, 0, layout.AbsoluteContentSize.Y + 10) end) -- Draggable mainFrame local dragging local dragInput local dragStart local startPos mainFrame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position startPos = mainFrame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) mainFrame.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement then dragInput = input end end) RunService.RenderStepped:Connect(function() if dragging and dragInput then local delta = dragInput.Position - dragStart mainFrame.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end end) -- Toggle menu with keybind (Right control) local UserInputService = game:GetService("UserInputService") UserInputService.InputBegan:Connect(function(input, gameProcessed) if not gameProcessed and input.KeyCode == Enum.KeyCode.RightControl then mainFrame.Visible = not mainFrame.Visible end end) -- Auto show menu on start for demo mainFrame.Visible = true