-- --- SANDEVISTAN SCRIPT (TELEPORT MODE - 5 CLONES PER COLOR) --- local Players = game:GetService("Players") local TweenService = game:GetService("TweenService") local Debris = game:GetService("Debris") local Lighting = game:GetService("Lighting") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local VRService = game:GetService("VRService") local player = Players.LocalPlayer -- --- TỰ ĐỘNG XÓA GUI CŨ KHI CHẠY LẠI LOADSTRING --- local playerGui = player:WaitForChild("PlayerGui") if playerGui:FindFirstChild("SandyGui") then playerGui.SandyGui:Destroy() end local character = player.Character or player.CharacterAdded:Wait() local hrp = character:WaitForChild("HumanoidRootPart") local humanoid = character:WaitForChild("Humanoid") local camera = workspace.CurrentCamera player.CharacterAdded:Connect(function(newChar) character = newChar hrp = character:WaitForChild("HumanoidRootPart") humanoid = character:WaitForChild("Humanoid") end) local sandyActive = false local activeClones = {} local auraHighlight = nil -- Biến quản lý hào quang trắng -- --- LIMIT CONFIGURATION --- local maxEnergy = 100 local currentEnergy = 100 local depleteSpeed = 4 local rechargeSpeed = 10 -- --- TELEPORT SANDEVISTAN CONFIGURATION --- local TELEPORT_DISTANCE = 4 local TELEPORT_INTERVAL = 0.07 -- --- DASH CONFIGURATION --- local DASH_SPEED = 120 local DASH_DURATION = 0.18 -- --- KEYBINDS PC CONFIGURATION --- local KEY_SANDEVISTAN = Enum.KeyCode.E local KEY_DASH = Enum.KeyCode.V -- --- BẢNG MÀU CHUYỂN ĐỔI (3 MÀU) --- local COLOR_PALETTE = { Color3.fromRGB(0, 170, 255), -- Xanh dương nhạt Color3.fromRGB(0, 35, 145), -- Xanh đậm Color3.fromRGB(0, 255, 0) -- Xanh lá } local cloneCounter = 0 local colorIndex = 1 -- Đổi màu sau khi tạo đủ 5 clones local function getNextCloneColor() cloneCounter = cloneCounter + 1 if cloneCounter >= 5 then cloneCounter = 0 colorIndex = colorIndex + 1 if colorIndex > #COLOR_PALETTE then colorIndex = 1 end end return COLOR_PALETTE[colorIndex] end -- --- SOUND ID CONFIGURATION --- local SOUND_ACTIVATE = "rbxassetid://90335135763714" local SOUND_DASH = "rbxassetid://90335135763714" -- --- GUI CREATION --- local screenGui = Instance.new("ScreenGui") screenGui.Name = "SandyGui" screenGui.ResetOnSpawn = false screenGui.Parent = playerGui if VRService.VREnabled then screenGui.Enabled = false end -- 1. Nút Sandevistan local actionButton = Instance.new("TextButton") actionButton.Size = UDim2.new(0, 90, 0, 90) actionButton.Position = UDim2.new(0.82, 0, 0.5, -45) actionButton.BackgroundColor3 = Color3.fromRGB(20, 30, 50) actionButton.TextColor3 = COLOR_PALETTE[1] actionButton.Text = "SANDEVISTAN" actionButton.TextSize = 10 actionButton.Font = Enum.Font.SourceSansBold actionButton.Parent = screenGui Instance.new("UICorner", actionButton).CornerRadius = UDim.new(0.5, 0) -- 2. Nút Dash local dashButton = Instance.new("TextButton") dashButton.Size = UDim2.new(0, 75, 0, 75) dashButton.Position = UDim2.new(0.83, -85, 0.5, 15) dashButton.BackgroundColor3 = Color3.fromRGB(15, 20, 35) dashButton.TextColor3 = COLOR_PALETTE[1] dashButton.Text = "DASH" dashButton.TextSize = 14 dashButton.Font = Enum.Font.SourceSansBold dashButton.Parent = screenGui Instance.new("UICorner", dashButton).CornerRadius = UDim.new(0.5, 0) -- 3. Thanh Nộ / Energy (Cố định ở bên trái màn hình) local barBackground = Instance.new("Frame") barBackground.Size = UDim2.new(0, 20, 0, 180) barBackground.Position = UDim2.new(0, 20, 0.5, -90) barBackground.BackgroundColor3 = Color3.fromRGB(10, 15, 25) barBackground.BorderSizePixel = 0 barBackground.Parent = screenGui Instance.new("UICorner", barBackground).CornerRadius = UDim.new(0.3, 0) local barFill = Instance.new("Frame") barFill.Size = UDim2.new(1, 0, 1, 0) barFill.BackgroundColor3 = COLOR_PALETTE[1] barFill.Parent = barBackground Instance.new("UICorner", barFill).CornerRadius = UDim.new(0.3, 0) -- 4. NÚT LOCK/UNLOCK DI CHUYỂN GUI local lockButton = Instance.new("TextButton") lockButton.Size = UDim2.new(0, 60, 0, 30) lockButton.Position = UDim2.new(0.82, 0, 0.5, -90) lockButton.BackgroundColor3 = Color3.fromRGB(180, 40, 40) -- Mặc định màu đỏ (Locked) lockButton.TextColor3 = Color3.fromRGB(255, 255, 255) lockButton.Text = "LOCKED" lockButton.TextSize = 11 lockButton.Font = Enum.Font.SourceSansBold lockButton.Parent = screenGui Instance.new("UICorner", lockButton).CornerRadius = UDim.new(0.3, 0) -- --- TÍNH NĂNG KÉO THẢ (DRAG SYSTEM) --- local isUnlocked = false local function makeDraggable(guiObject) local dragging = false local dragInput, dragStart, startPos guiObject.InputBegan:Connect(function(input) if not isUnlocked then return end if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = guiObject.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) guiObject.InputChanged:Connect(function(input) if not isUnlocked then return end if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if dragging and input == dragInput and isUnlocked then local delta = input.Position - dragStart guiObject.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end end) end makeDraggable(actionButton) makeDraggable(dashButton) makeDraggable(lockButton) lockButton.Activated:Connect(function() isUnlocked = not isUnlocked if isUnlocked then lockButton.Text = "UNLOCKED" lockButton.BackgroundColor3 = Color3.fromRGB(40, 180, 40) else lockButton.Text = "LOCKED" lockButton.BackgroundColor3 = Color3.fromRGB(180, 40, 40) end end) -- CYBERPUNK BLUE EFFECT local colorCorrection = Instance.new("ColorCorrectionEffect") colorCorrection.Enabled = false colorCorrection.Saturation = 0.5 colorCorrection.Contrast = 0.2 colorCorrection.TintColor = Color3.fromRGB(150, 200, 255) colorCorrection.Parent = Lighting -- HELPER FUNCTIONS local function playOneShotSound(soundId, volume, speed) if not hrp then return end local s = Instance.new("Sound") s.SoundId = soundId s.Volume = volume or 2 s.PlaybackSpeed = speed or 1 s.Parent = hrp s:Play() Debris:AddItem(s, 2) end local function getDashDirection() if humanoid and humanoid.MoveDirection.Magnitude > 0 then return humanoid.MoveDirection else return camera.CFrame.LookVector.Unit end end -- CLONE FUNCTION (SANDEVISTAN) local function generatePermanentClone(isStanding) if not character or not hrp then return end character.Archivable = true local clone = character:Clone() character.Archivable = false local currentColor = getNextCloneColor() if clone then local clonedAura = clone:FindFirstChild("SandyWhiteAura") if clonedAura then clonedAura:Destroy() end for _, child in ipairs(clone:GetChildren()) do if child:IsA("LocalScript") or child:IsA("Script") then child:Destroy() elseif child:IsA("Tool") then for _, tc in ipairs(child:GetDescendants()) do if tc:IsA("LocalScript") or tc:IsA("Script") then tc:Destroy() end end end end if clone:FindFirstChild("Humanoid") then clone.Humanoid:Destroy() end if clone:FindFirstChild("Animate") then clone.Animate:Destroy() end clone.Parent = workspace local backDirection = -hrp.CFrame.LookVector * 6 for _, part in pairs(clone:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = false part.Anchored = true if part.Name ~= "HumanoidRootPart" then part.Color = currentColor part.Material = Enum.Material.Neon part.Transparency = 0.3 if isStanding then local targetCFrame = part.CFrame + backDirection TweenService:Create(part, TweenInfo.new(0.6, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), { CFrame = targetCFrame }):Play() end else part.Transparency = 1 end end end table.insert(activeClones, clone) Debris:AddItem(clone, isStanding and 0.6 or 3) end end -- CLONE FADING FUNCTION (DASH) local function generateFadingClone(duration) if not character or not hrp then return end character.Archivable = true local clone = character:Clone() character.Archivable = false local fadeTime = duration or 0.3 local currentColor = getNextCloneColor() if clone then local clonedAura = clone:FindFirstChild("SandyWhiteAura") if clonedAura then clonedAura:Destroy() end for _, child in ipairs(clone:GetChildren()) do if child:IsA("LocalScript") or child:IsA("Script") then child:Destroy() elseif child:IsA("Tool") then for _, tc in ipairs(child:GetDescendants()) do if tc:IsA("LocalScript") or tc:IsA("Script") then tc:Destroy() end end end end if clone:FindFirstChild("Humanoid") then clone.Humanoid:Destroy() end if clone:FindFirstChild("Animate") then clone.Animate:Destroy() end clone.Parent = workspace for _, part in pairs(clone:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = false part.Anchored = true if part.Name ~= "HumanoidRootPart" then part.Color = currentColor part.Material = Enum.Material.Neon TweenService:Create(part, TweenInfo.new(fadeTime), {Transparency = 1}):Play() else part.Transparency = 1 end end end Debris:AddItem(clone, fadeTime) end end -- LOGIC SANDEVISTAN local function cleanUpSandevistan() if sandyActive then sandyActive = false actionButton.Text = "READY" colorCorrection.Enabled = false if auraHighlight then auraHighlight:Destroy() auraHighlight = nil end for _, clone in ipairs(activeClones) do if clone and clone.Parent then clone:Destroy() end end table.clear(activeClones) end end local function toggleSandevistan() if isUnlocked then return end if sandyActive then cleanUpSandevistan() elseif currentEnergy >= 10 then sandyActive = true actionButton.Text = "ACTIVE" colorCorrection.Enabled = true playOneShotSound(SOUND_ACTIVATE, 3.5, 1) if character then if auraHighlight then auraHighlight:Destroy() end auraHighlight = Instance.new("Highlight") auraHighlight.Name = "SandyWhiteAura" auraHighlight.FillTransparency = 1 auraHighlight.OutlineColor = Color3.fromRGB(255, 255, 255) auraHighlight.OutlineTransparency = 0 auraHighlight.Parent = character end task.spawn(function() while sandyActive do if humanoid and hrp then if humanoid.MoveDirection.Magnitude > 0 then generatePermanentClone(false) local dir = humanoid.MoveDirection hrp.CFrame = hrp.CFrame + (dir * TELEPORT_DISTANCE) task.wait(TELEPORT_INTERVAL) else generatePermanentClone(true) task.wait(0.12) end else task.wait(0.1) end end end) end end actionButton.Activated:Connect(toggleSandevistan) -- --- TÍNH NĂNG DASH --- local function doDash() if isUnlocked then return end if not hrp then return end colorCorrection.Enabled = true playOneShotSound(SOUND_DASH, 2, 1.5) local dashDir = getDashDirection() local bv = Instance.new("BodyVelocity") bv.MaxForce = Vector3.new(9e9, 9e9, 9e9) bv.Velocity = dashDir * DASH_SPEED bv.Parent = hrp local steeringConnection steeringConnection = RunService.RenderStepped:Connect(function() if bv and bv.Parent and humanoid and hrp then local currentDir = getDashDirection() bv.Velocity = currentDir * DASH_SPEED hrp.CFrame = CFrame.lookAt(hrp.Position, hrp.Position + currentDir) end end) task.spawn(function() for i = 1, 15 do if not bv or not bv.Parent then break end generateFadingClone(0.3) task.wait(0.01) end end) task.wait(DASH_DURATION) if steeringConnection then steeringConnection:Disconnect() end bv:Destroy() if not sandyActive then colorCorrection.Enabled = false end end dashButton.Activated:Connect(doDash) -- INPUTS PC & VR UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed then return end if VRService.VREnabled then if input.KeyCode == Enum.KeyCode.ButtonR2 then doDash() elseif input.KeyCode == Enum.KeyCode.ButtonR1 then toggleSandevistan() end else if input.KeyCode == KEY_SANDEVISTAN then toggleSandevistan() elseif input.KeyCode == KEY_DASH then doDash() end end end) -- Energy cycle task.spawn(function() while true do task.wait(0.1) if sandyActive then currentEnergy = math.max(0, currentEnergy - (depleteSpeed * 0.1)) if currentEnergy <= 0 then cleanUpSandevistan() end else currentEnergy = math.min(maxEnergy, currentEnergy + (rechargeSpeed * 0.1)) end local h = currentEnergy / maxEnergy TweenService:Create(barFill, TweenInfo.new(0.1), {Size = UDim2.new(1, 0, h, 0), Position = UDim2.new(0, 0, 1-h, 0)}):Play() end end)