Skip to content
Working

NEXAL HUB SCRIPT [VERSION 2]

CLclarkdevlinorg0 viewsIslandsJul 26, 2026
Share
NEXAL HUB  SCRIPT [VERSION 2]

Script Code

Lua
-- [[ NEXAL HUB: ULTIMATE PURPLE ECLIPSE - DARK THEME ]] --
local Players = game:GetService("Players")
local CoreGui = game:GetService("CoreGui")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local VirtualUser = game:GetService("VirtualUser")
local TweenService = game:GetService("TweenService")
local Lighting = game:GetService("Lighting")
local localPlayer = Players.LocalPlayer

-- [[ NETWORKING ]] --
local netManaged = ReplicatedStorage:WaitForChild("rbxts_include"):WaitForChild("node_modules"):WaitForChild("@rbxts"):WaitForChild("net"):WaitForChild("out"):WaitForChild("_NetManaged")
local remotes = {
    pickup = netManaged:WaitForChild("CLIENT_TOOL_PICKUP_REQUEST"),
    swing = netManaged:WaitForChild("CIENT_SWING_SWORD"),
    plow = netManaged:WaitForChild("CLIENT_PLOW_BLOCK_REQUEST"),
    harvest = netManaged:WaitForChild("CLIENT_HARVEST_CROP_REQUEST"),
    place = netManaged:WaitForChild("BLOCK_PLACE_REQUEST")
}

-- [[ STATES ]] --
local running = true
local pickupEnabled, auraEnabled, clearEnabled, farmEnabled = false, false, false, false
local selectedCrop = "wheat"
local activeTargets = {}

-- Visual States
local shadowsEnabled = true
local dayNightEnabled = false
local texturesEnabled = true
local originalClockTime = Lighting.ClockTime

-- Store original materials for proper restore
local originalMaterials = {}

-- [[ UI REBUILD ]] --
if CoreGui:FindFirstChild("NexalHub_Purple_Elite") then CoreGui.NexalHub_Purple_Elite:Destroy() end

local screenGui = Instance.new("ScreenGui", CoreGui)
screenGui.Name = "NexalHub_Purple_Elite"
screenGui.ResetOnSpawn = false

local main = Instance.new("Frame", screenGui)
main.Size = UDim2.new(0, 550, 0, 380)
main.Position = UDim2.new(0.5, -275, 0.4, -190)
main.BackgroundColor3 = Color3.fromRGB(8, 8, 12)
main.BorderSizePixel = 0
Instance.new("UICorner", main).CornerRadius = UDim.new(0, 12)

-- Shadow
local shadow = Instance.new("ImageLabel", screenGui)
shadow.BackgroundTransparency = 1
shadow.Image = "rbxassetid://6014261993"
shadow.ImageColor3 = Color3.fromRGB(0,0,0)
shadow.ImageTransparency = 0.65
shadow.Size = UDim2.new(0, 580, 0, 410)
shadow.Position = UDim2.new(0.5, -290, 0.4, -205)
shadow.ZIndex = 0

-- [[ SIDEBAR ]] --
local side = Instance.new("Frame", main)
side.Size = UDim2.new(0, 160, 1, 0)
side.BackgroundColor3 = Color3.fromRGB(12, 10, 18)
side.BorderSizePixel = 0
Instance.new("UICorner", side).CornerRadius = UDim.new(0, 12)

local sep = Instance.new("Frame", side)
sep.Size = UDim2.new(0, 1, 0.8, 0)
sep.Position = UDim2.new(1, -1, 0.1, 0)
sep.BackgroundColor3 = Color3.fromRGB(25, 20, 35)
sep.BorderSizePixel = 0

local title = Instance.new("TextLabel", side)
title.Size = UDim2.new(1, 0, 0, 65)
title.Text = "NEXAL HUB"
title.TextColor3 = Color3.new(1,1,1)
title.Font = "GothamBold"
title.TextSize = 20
title.BackgroundTransparency = 1

local grad = Instance.new("UIGradient", title)
grad.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(120, 60, 200)),
    ColorSequenceKeypoint.new(0.5, Color3.fromRGB(255, 255, 255)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(120, 60, 200))
})

task.spawn(function()
    while running do
        local t = TweenService:Create(grad, TweenInfo.new(3, Enum.EasingStyle.Linear), {Offset = Vector2.new(1, 0)})
        grad.Offset = Vector2.new(-1, 0)
        t:Play()
        t.Completed:Wait()
    end
end)

-- [[ PAGES ]] --
local container = Instance.new("Frame", main)
container.Position = UDim2.new(0, 170, 0, 20)
container.Size = UDim2.new(1, -190, 1, -40)
container.BackgroundTransparency = 1

local pages = {}
local buttons = {}

local function createPage(name, y)
    local p = Instance.new("ScrollingFrame", container)
    p.Size = UDim2.new(1, 0, 1, 0)
    p.BackgroundTransparency = 1
    p.Visible = (name == "AUTO")
    p.ScrollBarThickness = 0
    p.CanvasSize = UDim2.new(0,0,0,0)
    p.AutomaticCanvasSize = Enum.AutomaticSize.Y

    local layout = Instance.new("UIListLayout", p)
    layout.Padding = UDim.new(0, 10)
    layout.SortOrder = Enum.SortOrder.LayoutOrder

    pages[name] = p

    local b = Instance.new("TextButton", side)
    b.Size = UDim2.new(0.8, 0, 0, 35)
    b.Position = UDim2.new(0.1, 0, 0, y)
    b.Text = name
    b.BackgroundColor3 = (name == "AUTO") and Color3.fromRGB(45, 20, 80) or Color3.fromRGB(20, 18, 28)
    b.TextColor3 = Color3.new(1,1,1)
    b.Font = "GothamSemibold"
    b.TextSize = 12
    b.AutoButtonColor = false
    Instance.new("UICorner", b).CornerRadius = UDim.new(0, 6)
    buttons[name] = b

    b.MouseButton1Click:Connect(function()
        for _, v in pairs(pages) do v.Visible = false end
        for _, btn in pairs(buttons) do btn.BackgroundColor3 = Color3.fromRGB(20, 18, 28) end
        p.Visible = true
        b.BackgroundColor3 = Color3.fromRGB(45, 20, 80)
    end)
end

local function addToggle(name, parent, callback)
    local frame = Instance.new("Frame", parent)
    frame.Size = UDim2.new(1, 0, 0, 45)
    frame.BackgroundColor3 = Color3.fromRGB(15, 12, 22)
    Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 8)

    local t = Instance.new("TextLabel", frame)
    t.Size = UDim2.new(1, -50, 1, 0)
    t.Position = UDim2.new(0, 15, 0, 0)
    t.Text = name
    t.TextColor3 = Color3.fromRGB(220, 220, 220)
    t.Font = "GothamSemibold"
    t.TextSize = 13
    t.TextXAlignment = Enum.TextXAlignment.Left
    t.BackgroundTransparency = 1

    local btn = Instance.new("TextButton", frame)
    btn.Size = UDim2.new(0, 40, 0, 20)
    btn.Position = UDim2.new(1, -55, 0.5, -10)
    btn.BackgroundColor3 = Color3.fromRGB(35, 35, 45)
    btn.Text = ""
    Instance.new("UICorner", btn).CornerRadius = UDim.new(1, 0)

    local circle = Instance.new("Frame", btn)
    circle.Size = UDim2.new(0, 16, 0, 16)
    circle.Position = UDim2.new(0, 2, 0.5, -8)
    circle.BackgroundColor3 = Color3.new(1,1,1)
    Instance.new("UICorner", circle).CornerRadius = UDim.new(1, 0)

    local state = false
    btn.MouseButton1Click:Connect(function()
        state = not state
        callback(state)
        TweenService:Create(circle, TweenInfo.new(0.2), {Position = state and UDim2.new(1, -18, 0.5, -8) or UDim2.new(0, 2, 0.5, -8)}):Play()
        TweenService:Create(btn, TweenInfo.new(0.2), {BackgroundColor3 = state and Color3.fromRGB(90, 30, 180) or Color3.fromRGB(35, 35, 45)}):Play()
    end)
end

-- Setup Pages
createPage("AUTO", 80)
createPage("FARM", 125)
createPage("NAV", 170)
createPage("VISUALS", 215)

addToggle("Kill Aura", pages.AUTO, function(v) auraEnabled = v end)
addToggle("Auto Pickup", pages.AUTO, function(v) pickupEnabled = v end)
addToggle("Auto Clear", pages.AUTO, function(v) clearEnabled = v end)
addToggle("Master Farm", pages.FARM, function(v) farmEnabled = v end)

-- ==================== VISUALS TAB ====================
addToggle("Disable Shadows", pages.VISUALS, function(v)
    shadowsEnabled = v
    Lighting.GlobalShadows = not v
end)

addToggle("Day/Night Cycle (20min)", pages.VISUALS, function(v)
    dayNightEnabled = v
    if v then
        originalClockTime = Lighting.ClockTime
    else
        Lighting.ClockTime = originalClockTime
    end
end)

addToggle("Disable Textures", pages.VISUALS, function(v)
    texturesEnabled = v
    
    if v then
        -- First time: save original materials
        if next(originalMaterials) == nil then
            for _, obj in ipairs(workspace:GetDescendants()) do
                if obj:IsA("BasePart") then
                    originalMaterials[obj] = obj.Material
                end
            end
        end
        
        -- Disable textures
        for _, obj in ipairs(workspace:GetDescendants()) do
            if obj:IsA("Texture") or obj:IsA("Decal") then
                obj.Transparency = 1
            elseif obj:IsA("BasePart") then
                obj.Material = Enum.Material.Plastic  -- matte / non-reflective
            end
        end
    else
        -- Restore original materials
        for part, originalMat in pairs(originalMaterials) do
            if part and part.Parent then
                part.Material = originalMat
            end
        end
        -- Restore textures
        for _, obj in ipairs(workspace:GetDescendants()) do
            if obj:IsA("Texture") or obj:IsA("Decal") then
                obj.Transparency = 0
            end
        end
    end
end)

local cropLabel = Instance.new("TextLabel", pages.FARM)
cropLabel.Size = UDim2.new(1,0,0,25)
cropLabel.Text = "SELECTED CROP: " .. selectedCrop:upper()
cropLabel.TextColor3 = Color3.fromRGB(160, 80, 255)
cropLabel.Font = "GothamBold"
cropLabel.BackgroundTransparency = 1
cropLabel.TextSize = 11

for _, crop in pairs({"wheat", "onion", "carrot", "tomato"}) do
    local b = Instance.new("TextButton", pages.FARM)
    b.Size = UDim2.new(1, 0, 0, 35)
    b.Text = "Select " .. crop:sub(1,1):upper()..crop:sub(2)
    b.BackgroundColor3 = Color3.fromRGB(18, 16, 28)
    b.TextColor3 = Color3.new(0.8,0.8,0.8)
    b.Font = "GothamSemibold"
    b.TextSize = 12
    Instance.new("UICorner", b).CornerRadius = UDim.new(0, 6)

    b.MouseButton1Click:Connect(function()
        selectedCrop = crop
        cropLabel.Text = "SELECTED CROP: " .. crop:upper()
    end)
end

-- [[ LOOPS ]] --

-- Day/Night Cycle
task.spawn(function()
    while running do
        if dayNightEnabled then
            local time = (tick() % 1200) / 1200 * 24
            Lighting.ClockTime = time
        end
        task.wait(0.5)
    end
end)

-- Farming loop (unchanged)
task.spawn(function()
    while running do
        if farmEnabled then
            local island = workspace:FindFirstChild("Islands") and workspace.Islands:FindFirstChild(localPlayer.UserId .. "-island")
            if island then
                local blocks = island:WaitForChild("Blocks"):GetChildren()
                local occupied = {}

                for _, b in ipairs(blocks) do
                    local n = b.Name:lower()
                    if n:find("wheat") or n:find("onion") or n:find("carrot") or n:find("tomato") then
                        occupied[math.floor(b.Position.X) .. "," .. math.floor(b.Position.Z)] = true
                    end
                end

                for _, block in ipairs(blocks) do
                    if not farmEnabled then break end

                    local name = string.lower(block.Name)

                    if name:find(selectedCrop) then
                        remotes.harvest:InvokeServer({player = localPlayer, model = block})

                    elseif block.Name == "farmland" or block.Name == "soil" then
                        local key = math.floor(block.Position.X) .. "," .. math.floor(block.Position.Z)
                        if not occupied[key] then
                            remotes.place:InvokeServer({
                                cframe = CFrame.new(block.Position + Vector3.new(0, 3, 0)),
                                blockType = selectedCrop
                            })
                            occupied[key] = true
                        end
                    end
                end
            end
        end
        task.wait(0.005)
    end
end)

-- (Aura, Pickup, Clear loops unchanged - omitted for brevity)
task.spawn(function()
    while running do
        if auraEnabled and workspace:FindFirstChild("Entities") then
            for _, entity in ipairs(workspace.Entities:GetChildren()) do
                if auraEnabled and entity:IsA("Model") and entity ~= localPlayer.Character and not activeTargets[entity] then
                    activeTargets[entity] = true
                    task.spawn(function()
                        while running and auraEnabled and entity.Parent and entity:FindFirstChild("Humanoid") and entity.Humanoid.Health > 0 do
                            remotes.swing:InvokeServer({ hitUnit = entity });
                            task.wait(0.01)
                        end
                        activeTargets[entity] = nil
                    end)
                end
            end
        end
        task.wait(0.03)
    end
end)

task.spawn(function()
    while running do
        if pickupEnabled then
            local isl = workspace.Islands:FindFirstChild(localPlayer.UserId .. "-island")
            if isl and isl:FindFirstChild("Drops") then
                for _, item in ipairs(isl.Drops:GetChildren()) do
                    remotes.pickup:InvokeServer({ tool = item })
                end
            end
        end
        task.wait(0.01)
    end
end)

task.spawn(function()
    while running do
        if clearEnabled then
            local isl = workspace.Islands:FindFirstChild(localPlayer.UserId .. "-island")
            if isl and isl:FindFirstChild("Blocks") then
                for _, b in ipairs(isl.Blocks:GetChildren()) do
                    if b.Name == "tallGrass" or b.Name == "naturalRock1" then
                        remotes.plow:InvokeServer({ block = b });
                        task.wait(0.1)
                    end
                end
            end
        end
        task.wait(1)
    end
end)

-- [[ NAVIGATION ]] --
local function addTele(name, callback)
    local b = Instance.new("TextButton", pages.NAV)
    b.Size = UDim2.new(1, 0, 0, 40)
    b.Text = "Go to " .. name
    b.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
    b.TextColor3 = Color3.new(1,1,1)
    b.Font = "GothamSemibold"
    b.TextSize = 12
    Instance.new("UICorner", b).CornerRadius = UDim.new(0, 6)
    b.MouseButton1Click:Connect(callback)
end

addTele("Home Island", function()
    local island = workspace.Islands:FindFirstChild(localPlayer.UserId .. "-island")
    if island and localPlayer.Character:FindFirstChild("HumanoidRootPart") then
        local spawnLoc = island.Blocks:FindFirstChild("SpawnLocation")
        localPlayer.Character.HumanoidRootPart.CFrame = spawnLoc and spawnLoc.CFrame + Vector3.new(0, 3, 0) or island.Blocks:GetChildren()[1].CFrame + Vector3.new(0, 5, 0)
    end
end)

addTele("Main Hub", function()
    if localPlayer.Character:FindFirstChild("HumanoidRootPart") then
        localPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(276.45, 97.40, -561.03)
    end
end)

addTele("Slime Island", function()
    if localPlayer.Character:FindFirstChild("HumanoidRootPart") then
        localPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(926.19, 224.69, -401.42)
    end
end)

-- [[ DRAGGING ]] --
local drag, dragStart, startPos
main.InputBegan:Connect(function(i)
    if i.UserInputType == Enum.UserInputType.MouseButton1 then
        drag, dragStart, startPos = true, i.Position, main.Position
    end
end)
UserInputService.InputChanged:Connect(function(i)
    if drag and i.UserInputType == Enum.UserInputType.MouseMovement then
        local d = i.Position - dragStart
        local newPos = UDim2.new(startPos.X.Scale, startPos.X.Offset + d.X, startPos.Y.Scale, startPos.Y.Offset + d.Y)
        main.Position = newPos
        shadow.Position = UDim2.new(newPos.X.Scale, newPos.X.Offset - 15, newPos.Y.Scale, newPos.Y.Offset - 15)
    end
end)
UserInputService.InputEnded:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 then drag = false end end)

UserInputService.InputBegan:Connect(function(i, p)
    if not p and i.KeyCode == Enum.KeyCode.J then
        main.Visible = not main.Visible
        shadow.Visible = main.Visible
    end
end)

localPlayer.Idled:Connect(function() VirtualUser:CaptureController(); VirtualUser:ClickButton2(Vector2.new()) end)

local exit = Instance.new("TextButton", side)
exit.Size = UDim2.new(0.8, 0, 0, 35)
exit.Position = UDim2.new(0.1, 0, 1, -50)
exit.BackgroundColor3 = Color3.fromRGB(90, 20, 20)
exit.Text = "UNLOAD"
exit.TextColor3 = Color3.new(1,1,1)
exit.Font = "GothamBold"
exit.TextSize = 12
Instance.new("UICorner", exit).CornerRadius = UDim.new(0, 6)

exit.MouseButton1Click:Connect(function()
    running = false
    screenGui:Destroy()
end)

print("NEXAL HUB - VERSION 2")

Comments (0)

Log in to join the conversation

  • Be the first to comment.

Frequently asked questions

How do I use the NEXAL HUB SCRIPT [VERSION 2] script?
Copy the script code above, open your Roblox executor, paste the code, and press execute while you're in the game. The features activate instantly once the script runs.
Is the NEXAL HUB SCRIPT [VERSION 2] script free?
Yes. This script is free to copy and use. If it uses a key system, follow the "Get key" link to unlock it at no cost.
Is the NEXAL HUB SCRIPT [VERSION 2] script safe to use?
The full source code is shown on this page so you can read exactly what it does before running it. Always use a trusted executor, and remember that using scripts is against Roblox's terms of service, so use them at your own risk.
Which executor works with NEXAL HUB SCRIPT [VERSION 2]?
This script works with most popular Roblox executors. Check our executors page to find a trusted free or paid executor for your device.
NEXAL HUB SCRIPT [VERSION 2] | BloxScripter