Sandevistan
Key RequiredUniversal

Sandevistan

Universal Scriptlinhgio783linhgio783 1.9K views 7.4K executesUpdated Aug 6, 2026
5.0/ 5(3 votes)
30100% Positive
Lua Script•466 lines (15210 chars)
-- --- 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)

Features & Information

Dash and teleporter

Community Comments (2)

script up choom

camelsepu83camelsepu83Aug 20, 2026

The Sandevistan Sound its Loud

More Scripts for Universal Scripts