local Fluent = loadstring(game:HttpGet("https://[Log in to view URL]"))()

--// 1. DATA TABLES (Must be at the top to avoid 'got nil' errors)
local FORWARD_PATH = {
    Vector3.new(126.47, 12.51, -139.56),
    Vector3.new(250.98, 13.85, -135.78),
    Vector3.new(339.35, 14.39, -135.84),
    Vector3.new(458.24, 16.37, -136.77),
    Vector3.new(640.84, 14.75, -136.03),
    Vector3.new(885.34, 14.25, -137.70),
    Vector3.new(1296.26, 9.15, -137.50),
    Vector3.new(1847.33, 11.58, -138.27),
    Vector3.new(2438.52, 10.05, -138.15),
    Vector3.new(2603.31, 9.84, -136.55),
    Vector3.new(2605.96, 0.10, -92.80)
}

local RETURN_PATH = {
    Vector3.new(2618.78, 9.54, -131.20),
    Vector3.new(2488.85, 11.30, -136.14),
    Vector3.new(1966.37, 12.95, -135.80),
    Vector3.new(1303.52, 10.33, -136.67),
    Vector3.new(915.20, 8.82, -135.88),
    Vector3.new(663.70, 9.86, -135.60),
    Vector3.new(487.83, 11.40, -136.33),
    Vector3.new(337.44, 9.89, -134.70),
    Vector3.new(233.77, 9.34, -135.82),
    Vector3.new(125.00, 8.78, -136.99)
}

local OBBY_1_PATH = {
    Vector3.new(399.61, -3.77, -152.79),
    Vector3.new(399.17, -4.41, -180.83),
    Vector3.new(404.91, -5.02, -232.81),
    Vector3.new(424.33, -4.54, -230.75),
    Vector3.new(490.33, -2.86, -224.77),
    Vector3.new(500.93, -7.67, -274.92),
    Vector3.new(496.64, -7.56, -292.24),
    Vector3.new(497.32, -7.09, -304.09),
    Vector3.new(500.01, -7.34, -341.83),
    Vector3.new(475.44, -6.62, -341.89),
    Vector3.new(430.68, -5.67, -337.39)
}

local OBBY_2_PATH = {
    Vector3.new(1131.85, 2.61, 152.45),
    Vector3.new(1120.12, 10.95, 249.97),
    Vector3.new(1120.07, 17.27, 352.99),
    Vector3.new(1111.45, 16.39, 454.81),
    Vector3.new(1118.61, 11.39, 489.93),
    Vector3.new(1125.70, 7.98, 515.05),
    Vector3.new(1131.49, 7.98, 514.38),
    Vector3.new(1131.47, 8.72, 521.99)
}

--// 2. WINDOW CREATION
local Window = Fluent:CreateWindow({
    Title = "Escape Tsunami for Brainrots | NWR's Hub",
    SubTitle = "by whoisnwr",
    TabWidth = 160,
    Size = UDim2.fromOffset(450, 420),
    Acrylic = true,
    Theme = "Dark",
    MinimizeKey = Enum.KeyCode.LeftControl
})

local Tabs = {
    Main = Window:AddTab({ Title = "Main", Icon = "settings" }),
    Settings = Window:AddTab({ Title = "Settings", Icon = "cog" })
}

local Options = Fluent.Options
local SPEED = 350 

--// 3. MOVEMENT LOGIC
local function followPath(pathData)
    local char = game.Players.LocalPlayer.Character
    local root = char and char:FindFirstChild("HumanoidRootPart")
    local hum = char and char:FindFirstChildOfClass("Humanoid")

    if not root or not hum then 
        return Fluent:Notify({Title = "Error", Content = "Character missing!", Duration = 3}) 
    end

    hum:ChangeState(Enum.HumanoidStateType.Physics)
    local currentSpeed = Options.TravelSpeed and Options.TravelSpeed.Value or SPEED

    for _, targetPos in ipairs(pathData) do
        local distance = (root.Position - targetPos).Magnitude
        local duration = distance / currentSpeed
        
        local tween = game:GetService("TweenService"):Create(root, TweenInfo.new(duration, Enum.EasingStyle.Linear), {
            CFrame = CFrame.new(targetPos)
        })
        
        tween:Play()
        tween.Completed:Wait()
    end

    hum:ChangeState(Enum.HumanoidStateType.GettingUp)
end

--// 4. UI ELEMENTS
Tabs.Main:AddSlider("TravelSpeed", {
    Title = "Movement Speed",
    Default = 350,
    Min = 5,
    Max = 1000,
    Rounding = 0,
    Callback = function(Value) end
})

Tabs.Main:AddButton({
    Title = "Teleport to End",
    Callback = function() followPath(FORWARD_PATH) end
})

Tabs.Main:AddButton({
    Title = "Return to Start",
    Callback = function() followPath(RETURN_PATH) end
})

Tabs.Main:AddButton({
    Title = "Complete Obby 1",
    Description = "Auto-completes the first money obby",
    Callback = function() followPath(OBBY_1_PATH) end
})

Tabs.Main:AddButton({
    Title = "Complete Obby 2",
    Description = "Auto-completes the second money obby",
    Callback = function() followPath(OBBY_2_PATH) end
})

--// 5. SETTINGS
Tabs.Settings:AddButton({
    Title = "Rejoin Server",
    Callback = function()
        game:GetService("TeleportService"):Teleport(game.PlaceId, game.Players.LocalPlayer)
    end
})

Tabs.Settings:AddKeybind("MenuKeybind", {
    Title = "Minimize Keybind",
    Default = "LeftControl",
    Callback = function(Value) Window:SetMinimizeKey(Value) end,
})

--// 6. INITIALIZATION
task.spawn(function()
    pcall(function()
        local Junkie = loadstring(game:HttpGet("https://[Log in to view URL]"))()
        Junkie.service = "NWR's Hub"
        Junkie.identifier = "1009357"
        Junkie.provider = "NWR's Hub"
    end)
    Fluent:Notify({Title = "NWR Hub", Content = "Bot Ready!", Duration = 3})
end)

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: