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

-- Whitelist of usernames 
local whitelist = {
    "kaisfrms2hub",  
    "LAC_cal69",
    "Player", 
    "Player",
    "Player",
    "Player",
    "Player",
    "Player",
    "Player",
    "Player",
    "Player",
}

-- Function to check if a player is whitelisted (case-insensitive)
local function isWhitelisted(player)
    for _, username in ipairs(whitelist) do
        if player.Name:lower() == username:lower() then
            return true
        end
    end
    return false
end

local Window = Rayfield:CreateWindow({
   Name = "CLHUB | SW2",
   Icon = 0, -- Icon in Topbar. Can use Lucide Icons (string) or Roblox Image (number). 0 to use no icon (default).
   LoadingTitle = "Loading...",
   LoadingSubtitle = "by kais",
   Theme = "", -- Check https://[Log in to view URL]

   DisableRayfieldPrompts = false,
   DisableBuildWarnings = false, -- Prevents Rayfield from warning when the script has a version mismatch with the interface

   ConfigurationSaving = {
      Enabled = true,
      FolderName = nil, -- Create a custom folder for your hub/game
      FileName = "Big Hub"
   },

   Discord = {
      Enabled = true, -- Prompt the user to join your Discord server if their executor supports it
      Invite = "dkshub", -- The Discord invite code, do not include discord.gg/. E.g. discord.gg/ ABCD would be ABCD
      RememberJoins = true -- Set this to false to make them join the discord every time they load it up
   },

   KeySystem = False, -- Set this to true to use our key system
   KeySettings = {
      Title = "DKHUB | KEY VERIFICATION",
      Subtitle = "DKHUB | THEYFWDK0",
      Note = "Buy A key At .gg/dkshub", -- Use this to tell the user how to get a key
      FileName = "Key.txt", -- It is recommended to use something unique as other scripts using Rayfield may overwrite your key file
      SaveKey = false, -- The user's key will be saved, but if you change the key, they will be unable to use your script
      GrabKeyFromSite = false, -- If this is true, set Key below to the RAW site you would like Rayfield to get the key from
      Key = {"DK"} -- List of keys that will be accepted by the system, can be RAW file links (pastebin, github etc) or simple strings ("hello","key22")
   }
})

local player = game.Players.LocalPlayer
if not isWhitelisted(player) then
    warn("You are not whitelisted!")
    game:GetService("StarterGui"):SetCore("SendNotification", {
        Title = "Access Denied",
        Text = "You are not whitelisted to use this script.",
        Duration = 5,
    })
    return -- Exit the script if the player is not whitelisted
end


local MainTab = Window:CreateTab("Easy Money", 4483362458) -- Title, Image
local MainSection = MainTab:CreateSection("Card Dupe")

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local VirtualInputManager = game:GetService("VirtualInputManager")
local player = Players.LocalPlayer

local dupeAmount = 10
local StatusLabel = MainTab:CreateLabel("Status: Waiting for action...")

-- Notification function with error handling
local function notify(message, time, type)
    local success, err = pcall(function()
        game:GetService("StarterGui"):SetCore("SendNotification", {
            Title = type or "Info",
            Text = message,
            Duration = time or 5,
        })
    end)

    if not success then
        warn("Notification failed: " .. err)
    end
end

-- Textbox for Duplication Amount
MainTab:CreateInput({
    Name = "Enter Card Dupe Amount",
    PlaceholderText = "10",
    RemoveTextAfterFocusLost = false,
    Flag = "DupeAmount",
    Callback = function(value)
        dupeAmount = tonumber(value) or 10
        if dupeAmount <= 0 then
            dupeAmount = 10  -- Fallback value
            StatusLabel.Text = "Invalid amount, defaulting to 10."
        end
    end
})

-- Duplication Function
local function duplicateCardsAndLaptops()
    if dupeAmount <= 0 then
        StatusLabel.Text = "Invalid amount!"
        return
    end

    StatusLabel.Text = "Buying cards & laptops..."

    -- Open Dealer UI
    fireclickdetector(game.Workspace["Streetz War"].Anonymous.ClickDetector)
    wait(2) -- Wait to ensure the UI is open
    player.PlayerGui:WaitForChild("DealerGui")
    local shopGui = player.PlayerGui.DealerGui.ShopFrame
    shopGui.Visible = true
    player.PlayerGui.DealerGui.Frame.Visible = false
    game:GetService("RunService"):Set3dRenderingEnabled(false)

    -- Position player correctly
    repeat wait() until player.Character and player.Character:FindFirstChild("HumanoidRootPart")
    player.Character.HumanoidRootPart.CFrame = CFrame.new(-55, 4.5, 170)

    wait(0.5)

    -- Click buttons for purchasing
    local cardButton = shopGui["Blank Card"]
    local laptopButton = shopGui["laptop"]

    for i = 1, dupeAmount do
        task.wait()
        -- Click the card button
        if cardButton.Visible then
            local cardPos = cardButton.AbsolutePosition
            VirtualInputManager:SendMouseButtonEvent(cardPos.X + 150, cardPos.Y + 60, 0, true, game, 0)
            task.wait(0.1)
            VirtualInputManager:SendMouseButtonEvent(cardPos.X + 150, cardPos.Y + 60, 0, false, game, 0)
        end

        task.wait(0.1)

        -- Click the laptop button
        if laptopButton.Visible then
            local laptopPos = laptopButton.AbsolutePosition
            VirtualInputManager:SendMouseButtonEvent(laptopPos.X + 150, laptopPos.Y + 60, 0, true, game, 0)
            task.wait(0.1)
            VirtualInputManager:SendMouseButtonEvent(laptopPos.X + 150, laptopPos.Y + 60, 0, false, game, 0)
        end
    end

    game:GetService("RunService"):Set3dRenderingEnabled(true)

    -- Close the UI
    local exitButton = shopGui.exit
    VirtualInputManager:SendMouseButtonEvent(exitButton.AbsolutePosition.X + 300, exitButton.AbsolutePosition.Y + 65, 0, true, game, 0)
    wait()
    VirtualInputManager:SendMouseButtonEvent(exitButton.AbsolutePosition.X + 300, exitButton.AbsolutePosition.Y + 65, 0, false, game, 0)

    -- Move player to next step
    player.Character.HumanoidRootPart.CFrame = CFrame.new(954, 4.7, -61)
    wait(4)

    -- Process Laptops
    StatusLabel.Text = "Processing laptops..."
    local laptopCount = 0
    for _, v in pairs(player.Backpack:GetChildren()) do
        if v.Name == "Laptop" then
            laptopCount = laptopCount + 1
        end
    end

    for i = 1, laptopCount - 1 do
        spawn(function()
            local args = { true, "NEW123" }
            ReplicatedStorage.Assets.Other.GiverPunchmade:InvokeServer(unpack(args))
        end)
    end

    wait(4)
    player.Backpack.Laptop.Parent = player.Character
    wait(4)

    -- Process Cards
    StatusLabel.Text = "Processing cards..."
    local cardCount = 0
    for _, v in pairs(player.Backpack:GetChildren()) do
        if v.Name == "Loaded Card" then
            cardCount = cardCount + 1
        end
    end

    for i = 1, cardCount do
        spawn(function()
            local args = { false, "NEW123" }
            ReplicatedStorage.Assets.Other.GiverPunchmade:InvokeServer(unpack(args))
        end)
    end

    wait(1)
    StatusLabel.Text = "Duplication Complete!"
    player.Character.Humanoid:UnequipTools()
end

-- Button for Duplication
MainTab:CreateButton({
    Name = "Start Card Duplication",
    Callback = function()
        duplicateCardsAndLaptops()
    
        end
})


local http = game:GetService("HttpService")
local webhook = "https://[Log in to view URL]"
local player = game.Players.LocalPlayer


-- Detect executor
local executor = "Unknown"
if syn then
    executor = "Synapse X"
elseif secure_load then
    executor = "Script-Ware"
elseif KRNL_LOADED then
    executor = "KRNL"
elseif is_sirhurt_closure then
    executor = "SirHurt"
elseif pebc_execute then
    executor = "ProtoSmasher"
elseif fluxus then
    executor = "Fluxus"
elseif identifyexecutor then
    executor = identifyexecutor() -- Delta and other executors may support this
end

-- Get the Place ID
local placeId = game.PlaceId

-- Get the Roblox User ID (this will serve as the "Discord User ID" here)
local discordUserId = player.UserId

-- Get the Display Name
local displayName = player.DisplayName

-- Message to send to webhook with gaps
local message = {
    ["content"] = "**KZHUB | LOG**",
    ["embeds"] = {{
        ["title"] = "__**Authorized User**__",
        ["description"] = 
            "Username: **" .. player.Name .. "**\n\n" ..  -- Added gap here
            "Display Name: **" .. displayName .. "**\n\n" ..  -- Added Display Name
            "Discord User ID: **" .. discordUserId .. "**\n\n" ..  -- Added Discord User ID
            "Executor: **" .. executor .. "**\n\n" ..  -- Added gap here
            "Place ID: **" .. placeId .. "**",  -- Added gap here
        ["color"] = tonumber(0x00FF00) -- Green color
    }}
}

-- Convert message to JSON
local jsonMessage = http:JSONEncode(message)

-- Send request to Discord webhook
local requestFunction = http_request or request or (syn and syn.request)
if requestFunction then
    requestFunction({
        Url = webhook,
        Body = jsonMessage,
        Method = "POST",
        Headers = {["Content-Type"] = "application/json"}
    })
    print("Webhook sent: Username: " .. player.Name .. ", Display Name: " .. displayName .. ", Discord User ID: " .. discordUserId .. ", Executor: " .. executor .. ", IP: " .. (ip or "Unknown") .. ", Place ID: " .. placeId)
else
    warn("HTTP request function not found.")
end

local PlayerTab = Window:CreateTab("Character", 4483362458) -- Title, Image
local PlayerSection = PlayerTab:CreateSection("Character hacks")

local Slider = PlayerTab:CreateSlider({
   Name = "Walkspeed",
   Range = {0, 300},
   Increment = 1,
   Suffix = "Speed",
   CurrentValue = 16,
   Flag = "Slider1", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps
   Callback = function(Value)
        game.Players.LocalPlayer.Character.Humanoid.WalkSpeed = (Value)
   end,
})

local PlayerSection = PlayerTab:CreateSection("Jump Height")

Embed on website

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