-- [[ 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")
Keyless
Keyless
Keyless