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

local Window = Rayfield:CreateWindow({
   Name = "🔥Villainhub🔫",
   LoadingTitle = "🔫villainhub script 💥",
   LoadingSubtitle = "by villain",
   ConfigurationSaving = {
      Enabled = false,
      FolderName = nil,
      FileName = "Example Hub"
   },
   Discord = {
      Enabled = false,
      Invite = "https://[Log in to view URL]",
      RememberJoins = true
   },
   KeySystem = true, -- ✅ Key system enabled
   KeySettings = {
      Title = "villainhub key",
      Subtitle = "Key System",
      Note = "Get your key from Discord",
      FileName = "villainHubKey1",
      SaveKey = false, -- forces online validation every run
      GrabKeyFromSite = false, -- ✅ Use Luarmor keys, not Pastebin
      Key = {} -- leave empty; Luarmor will handle keys automatically
   }
})

-- ✅ Check key immediately using Luarmor
local success, msg = pcall(function()
    return Window:CheckKey()
end)

if not success or not msg then
    Rayfield:Notify({
        Title = "Access Denied",
        Content = "You are not whitelisted!",
        Duration = 5,
        Image = 13047715178,
        Actions = {
            Ignore = {
                Name = "Okay",
                Callback = function()
                    print("User not whitelisted")
                end
            }
        }
    })
    return -- stops the script completely
end

-- Main Tab
local MainTab = Window:CreateTab("🏠 Home", nil)
local MainSection = MainTab:CreateSection("Main")

Rayfield:Notify({
   Title = "You executed the script",
   Content = "Very cool gui",
   Duration = 5,
   Image = 13047715178,
   Actions = {
      Ignore = {
         Name = "Okay!",
         Callback = function()
            print("The user tapped Okay!")
         end
      }
   },
})

-- Infinite Jump Button
local Button = MainTab:CreateButton({
   Name = "Infinite Jump Toggle",
   Callback = function()
       _G.infinjump = not _G.infinjump

       if _G.infinJumpStarted == nil then
           _G.infinJumpStarted = true
           game.StarterGui:SetCore("SendNotification", {Title="Youtube Hub"; Text="Infinite Jump Activated!"; Duration=5;})

           local plr = game:GetService('Players').LocalPlayer
           local m = plr:GetMouse()
           m.KeyDown:Connect(function(k)
               if _G.infinjump then
                   if k:byte() == 32 then
                       local humanoid = plr.Character:FindFirstChildOfClass('Humanoid')
                       if humanoid then
                           humanoid:ChangeState('Jumping')
                           wait()
                           humanoid:ChangeState('Seated')
                       end
                   end
               end
           end)
       end
   end,
})

-- WalkSpeed Slider
local Slider = MainTab:CreateSlider({
   Name = "WalkSpeed Slider",
   Range = {1, 20}, -- ✅ Updated range
   Increment = 1,
   Suffix = "Speed",
   CurrentValue = 20, -- ✅ Default updated to 20
   Flag = "sliderws",
   Callback = function(Value)
        game.Players.LocalPlayer.Character.Humanoid.WalkSpeed = Value
   end,
})

-- JumpPower Slider
local Slider = MainTab:CreateSlider({
   Name = "JumpPower Slider",
   Range = {1, 20}, -- ✅ Updated range
   Increment = 1,
   Suffix = "Speed",
   CurrentValue = 20, -- ✅ Default updated to 20
   Flag = "sliderjp",
   Callback = function(Value)
        game.Players.LocalPlayer.Character.Humanoid.JumpPower = Value
   end,
})

-- Area Dropdown
local Dropdown = MainTab:CreateDropdown({
   Name = "Select Area",
   Options = {"Starter World","Pirate Island","Pineapple Paradise"},
   CurrentOption = {"Starter World"},
   MultipleOptions = false,
   Flag = "dropdownarea",
   Callback = function(Option)
        print(Option)
   end,
})

-- Walkspeed Input
local Input = MainTab:CreateInput({
   Name = "Walkspeed",
   PlaceholderText = "1-20", -- Updated placeholder
   RemoveTextAfterFocusLost = true,
   Callback = function(Text)
        local value = tonumber(Text)
        if value then
            if value < 1 then value = 1 end
            if value > 20 then value = 20 -- limit input to new max
            game.Players.LocalPlayer.Character.Humanoid.WalkSpeed = value
        end
   end,
})

-- Other Section
local OtherSection = MainTab:CreateSection("Other")

local Toggle = MainTab:CreateToggle({
   Name = "aimbot",
   CurrentValue = false,
   Flag = "Toggle1",
   Callback = function(Value)
        print("AIMBOT")
   end,
})

-- Teleports Tab
local TPTab = Window:CreateTab("🏝 Teleports", nil)
local Button1 = TPTab:CreateButton({Name = "marsh mello seller", Callback = function() end})
local Button2 = TPTab:CreateButton({Name = "bank", Callback = function() end})
local Button3 = TPTab:CreateButton({Name = "casino", Callback = function() end})

-- Misc Tab
local MiscTab = Window:CreateTab("🎲 Misc", nil)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local localPlayer = Players.LocalPlayer

-- Autofarm toggle
MiscTab:CreateToggle({
    Name = "Autofarm",
    CurrentValue = false,
    Flag = "Toggle1",
    Callback = function(Value)
        print('Autofarm toggled:', Value)
    end,
})

-- Noclip toggle
local noclip = false
MiscTab:CreateToggle({
    Name = "Noclip",
    CurrentValue = false,
    Flag = "noclipToggle",
    Callback = function(Value)
        noclip = Value
    end,
})

-- Noclip logic
RunService.Stepped:Connect(function()
    local char = localPlayer.Character
    if char then
        for _, part in pairs(char:GetChildren()) do
            if part:IsA("BasePart") then
                part.CanCollide = not noclip
            end
        end
    end
end)

localPlayer.CharacterAdded:Connect(function(char)
    wait(0.1)
    for _, part in pairs(char:GetChildren()) do
        if part:IsA("BasePart") then
            part.CanCollide = not noclip
        end
    end
end)

-- ESP toggle
local espEnabled = false
local highlights = {}

MiscTab:CreateToggle({
    Name = "ESP",
    CurrentValue = false,
    Flag = "ESPtoggle",
    Callback = function(Value)
        espEnabled = Value
        if not espEnabled then
            for _, hl in pairs(highlights) do
                if hl and hl.Parent then
                    hl:Destroy()
                end
            end
            highlights = {}
        else
            for _, player in pairs(Players:GetPlayers()) do
                local char = player.Character
                if char and not highlights[char] then
                    local hl = Instance.new("Highlight")
                    hl.FillColor = Color3.fromRGB(0, 255, 0)
                    hl.OutlineColor = Color3.fromRGB(255, 255, 255)
                    hl.Parent = char
                    highlights[char] = hl
                end
            end
        end
    end,
})

Players.PlayerAdded:Connect(function(player)
    player.CharacterAdded:Connect(function(char)
        if espEnabled then
            local hl = Instance.new("Highlight")
            hl.FillColor = Color3.fromRGB(0, 255, 0)
            hl.OutlineColor = Color3.fromRGB(255, 255, 255)
            hl.Parent = char
            highlights[char] = hl
        end
    end)
end)

Embed on website

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