Studio LOL
Key Required

Studio LOL

Studio LiteGlodonGlodon 315 views 107 executesUpdated Aug 13, 2026
Unrated
00
Lua Script•730 lines (33462 chars)
-- ====================================================================================
-- 👑 STUDIO LITE: OMNI GOD-TIER ULTIMATE STUDIO SUITE (2026 EDITION)
-- ====================================================================================
local Rayfield = loadstring(game:HttpGet('https://sirius.menu/rayfield'))()

local Window = Rayfield:CreateWindow({
   Name = "👑 Studio Lite - Omni God-Tier Suite [Full Edition]",
   LoadingTitle = "Inicializando Entorno de Desarrollo Maestro...",
   LoadingSubtitle = "Simulador Absoluto: F3X Gizmos Reales, Editor Dual de Animación, Timeline de Keyframes Interactivos, Script Editor y Dex Explorer Pro",
   ConfigurationSaving = { Enabled = true, FolderName = "StudioOmniGodUltimate", FileName = "OmniGodConfig" }
})

-- ====================================================================================
-- VARIABLES GLOBALES & SERVICIOS
-- ====================================================================================
local CoreGui = game:GetService("CoreGui")
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local Mouse = LocalPlayer:GetMouse()
local Lighting = game:GetService("Lighting")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")

local ccaGui = nil
local scriptEditorGui = nil
local animatorGui1 = nil
local animatorGui2 = nil
local selectedPart = nil
local currentTool = "Select"

-- Sistema Avanzado de Keyframes Interactivos (Línea de tiempo con selección individual y edición)
local isRecording = false
local recordedFrames = {} -- { {Time = 0, CFrame = ..., Selected = false}, ... }
local recordTime = 0
local recordConnection = nil
local playbackIndex = 1
local isPlayingAnimation = false
local selectedKeyframeIndex = nil

-- Gizmos 3D Profesionales Estilo F3X (Precisión milimétrica y suavidad absoluta)
local MoveGizmo = Instance.new("Handles")
MoveGizmo.Style = Enum.HandlesStyle.Movement
local ScaleGizmo = Instance.new("Handles")
ScaleGizmo.Style = Enum.HandlesStyle.Resize
local RotateGizmo = Instance.new("ArcHandles")

local function HideAllGizmos()
    MoveGizmo.Adornee = nil
    ScaleGizmo.Adornee = nil
    RotateGizmo.Adornee = nil
end

local function UpdateGizmos()
    HideAllGizmos()
    if not selectedPart then return end
    if currentTool == "Move" then MoveGizmo.Adornee = selectedPart
    elseif currentTool == "Scale" then ScaleGizmo.Adornee = selectedPart
    elseif currentTool == "Rotate" then RotateGizmo.Adornee = selectedPart end
end

-- Movimiento F3X Estándar y Preciso (Evita saltos raros, velocidad exacta y fluida)
MoveGizmo.MouseDrag:Connect(function(normal, distance)
    if selectedPart then
        local axis = Vector3.FromNormalId(normal)
        selectedPart.Position = selectedPart.Position + (axis * (distance * 0.1))
    end
end)

ScaleGizmo.MouseDrag:Connect(function(normal, distance)
    if selectedPart then
        local axis = Vector3.FromNormalId(normal)
        selectedPart.Size = Vector3.new(
            math.max(0.2, selectedPart.Size.X + (axis.X * distance * 0.1)),
            math.max(0.2, selectedPart.Size.Y + (axis.Y * distance * 0.1)),
            math.max(0.2, selectedPart.Size.Z + (axis.Z * distance * 0.1))
        )
    end
end)

-- Rotación estilo F3X con ArcHandles (Giro suave y natural por grados precisos)
RotateGizmo.MouseDrag:Connect(function(axis, relativeAngle, deltaAngle)
    if selectedPart then
        local rotIncrement = deltaAngle * 0.5
        if axis == Enum.Axis.X then
            selectedPart.CFrame = selectedPart.CFrame * CFrame.Angles(rotIncrement, 0, 0)
        elseif axis == Enum.Axis.Y then
            selectedPart.CFrame = selectedPart.CFrame * CFrame.Angles(0, rotIncrement, 0)
        elseif axis == Enum.Axis.Z then
            selectedPart.CFrame = selectedPart.CFrame * CFrame.Angles(0, 0, rotIncrement)
        end
    end
end)

-- Selección robusta que previene conflictos con las UIs propias
Mouse.Button1Down:Connect(function()
    if Mouse.Target and Mouse.Target:IsA("BasePart") then
        local hitPart = Mouse.Target
        if not hitPart:IsDescendantOf(CoreGui) then
            selectedPart = hitPart
            UpdateGizmos()
        end
    end
end)

-- ====================================================================================
-- MINI UI 1: CCA GIZMOS CON FUNCIONES NORMALES Y FLUIDAS (ESTILO F3X)
-- ====================================================================================
local function CreateCCA_UI()
    if ccaGui then ccaGui:Destroy() end
    ccaGui = Instance.new("ScreenGui", CoreGui)
    ccaGui.Name = "CCA_Panel"
    ccaGui.ResetOnSpawn = false

    local Main = Instance.new("Frame", ccaGui)
    Main.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
    Main.Position = UDim2.new(0.8, 0, 0.4, 0)
    Main.Size = UDim2.new(0, 170, 0, 250)
    Main.BorderSizePixel = 0
    Main.Active = true
    Main.Draggable = true

    Instance.new("UICorner", Main).CornerRadius = UDim.new(0, 10)
    local stroke = Instance.new("UIStroke", Main)
    stroke.Color = Color3.fromRGB(0, 170, 255)
    stroke.Thickness = 2

    local Title = Instance.new("TextLabel", Main)
    Title.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
    Title.Size = UDim2.new(1, 0, 0, 35)
    Title.Font = Enum.Font.GothamBold
    Title.Text = "🛠️ F3X / CCA Gizmos Pro"
    Title.TextColor3 = Color3.fromRGB(255, 255, 255)
    Title.TextSize = 13
    Instance.new("UICorner", Title).CornerRadius = UDim.new(0, 10)

    local function MakeBtn(name, y, toolType)
        local b = Instance.new("TextButton", Main)
        b.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
        b.Position = UDim2.new(0.07, 0, 0, y)
        b.Size = UDim2.new(0.85, 0, 0, 35)
        b.Font = Enum.Font.GothamSemibold
        b.Text = name
        b.TextColor3 = Color3.fromRGB(255, 255, 255)
        b.TextSize = 12
        Instance.new("UICorner", b).CornerRadius = UDim.new(0, 6)
        b.MouseButton1Click:Connect(function()
            currentTool = toolType
            UpdateGizmos()
            Rayfield:Notify({Title = "Herramienta F3X", Content = "Modo activo: " .. name, Duration = 1})
        end)
    end
    MakeBtn("👆 Seleccionar", 45, "Select")
    MakeBtn("↔️ Mover (Suave)", 85, "Move")
    MakeBtn("🔄 Girar (Arc)", 125, "Rotate")
    MakeBtn("🔲 Escalar", 165, "Scale")

    local Close = Instance.new("TextButton", Main)
    Close.BackgroundColor3 = Color3.fromRGB(200, 50, 50)
    Close.Position = UDim2.new(0.07, 0, 205, 0) -- Corregido en contenedor
    Close.Size = UDim2.new(0.85, 0, 0, 30)
    Close.Font = Enum.Font.GothamBold
    Close.Text = "Cerrar Panel"
    Close.TextColor3 = Color3.fromRGB(255, 255, 255)
    Instance.new("UICorner", Close).CornerRadius = UDim.new(0, 6)
    Close.MouseButton1Click:Connect(function()
        if ccaGui then ccaGui:Destroy() ccaGui = nil end
        HideAllGizmos()
    end)
end

-- ====================================================================================
-- MINI UI 2: ANIMADOR AVANZADO CON SELECCIÓN DE KEYFRAMES Y LÍNEA DE TIEMPO INTERACTIVA
-- ====================================================================================
local function CreateAnimatorUI_2()
    if animatorGui2 then animatorGui2:Destroy() end
    animatorGui2 = Instance.new("ScreenGui", CoreGui)
    animatorGui2.Name = "StudioAnimatorUI_2"
    animatorGui2.ResetOnSpawn = false

    local Frame = Instance.new("Frame", animatorGui2)
    Frame.BackgroundColor3 = Color3.fromRGB(22, 22, 22)
    Frame.Position = UDim2.new(0.2, 0, 0.55, 0)
    Frame.Size = UDim2.new(0, 580, 0, 250)
    Frame.BorderSizePixel = 0
    Frame.Active = true
    Frame.Draggable = true

    Instance.new("UICorner", Frame).CornerRadius = UDim.new(0, 12)
    local s = Instance.new("UIStroke", Frame)
    s.Color = Color3.fromRGB(255, 128, 0)
    s.Thickness = 2

    local Title = Instance.new("TextLabel", Frame)
    Title.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
    Title.Size = UDim2.new(1, 0, 0, 35)
    Title.Font = Enum.Font.GothamBold
    Title.Text = "🎬 Timeline Pro & Keyframe Selector (Estilo Roblox Studio)"
    Title.TextColor3 = Color3.fromRGB(255, 255, 255)
    Title.TextSize = 12
    Instance.new("UICorner", Title).CornerRadius = UDim.new(0, 12)

    -- Contenedor de la Línea de Tiempo
    local TimelineContainer = Instance.new("ScrollingFrame", Frame)
    TimelineContainer.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
    TimelineContainer.Position = UDim2.new(0.04, 0, 0.22, 0)
    TimelineContainer.Size = UDim2.new(0.92, 0, 0, 65)
    TimelineContainer.CanvasSize = UDim2.new(2, 0, 0, 0)
    TimelineContainer.ScrollBarThickness = 6
    Instance.new("UICorner", TimelineContainer).CornerRadius = UDim.new(0, 8)

    local StatusLabel = Instance.new("TextLabel", Frame)
    StatusLabel.Position = UDim2.new(0.04, 0, 0.52, 0)
    StatusLabel.Size = UDim2.new(0.92, 0, 0, 25)
    StatusLabel.BackgroundTransparency = 1
    StatusLabel.Font = Enum.Font.Gotham
    StatusLabel.Text = "Estado: Graba keyframes, luego haz clic en cada punto de la línea para seleccionarlo y editarlo."
    StatusLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
    StatusLabel.TextSize = 11

    local function RenderKeyframeNodes()
        -- Limpiar nodos anteriores en el scrolling frame
        for _, child in ipairs(TimelineContainer:GetChildren()) do
            if child:IsA("TextButton") then child:Destroy() end
        end

        for idx, kf in ipairs(recordedFrames) do
            local kfNode = Instance.new("TextButton", TimelineContainer)
            kfNode.BackgroundColor3 = (selectedKeyframeIndex == idx) and Color3.fromRGB(0, 255, 128) or Color3.fromRGB(0, 170, 255)
            kfNode.Position = UDim2.new(0, (idx * 35) - 25, 0.2, 0)
            kfNode.Size = UDim2.new(0, 25, 0, 35)
            kfNode.Font = Enum.Font.GothamBold
            kfNode.Text = tostring(idx)
            kfNode.TextColor3 = Color3.fromRGB(255, 255, 255)
            kfNode.TextSize = 11
            Instance.new("UICorner", kfNode).CornerRadius = UDim.new(0, 6)

            kfNode.MouseButton1Click:Connect(function()
                selectedKeyframeIndex = idx
                if selectedPart and kf.CFrame then
                    selectedPart.CFrame = kf.CFrame
                end
                StatusLabel.Text = "Keyframe #" .. idx .. " seleccionado y aplicado a la pieza."
                RenderKeyframeNodes()
            end)
        end
    end

    -- Botón Grabar Keyframe
    local RecordBtn = Instance.new("TextButton", Frame)
    RecordBtn.BackgroundColor3 = Color3.fromRGB(200, 50, 50)
    RecordBtn.Position = UDim2.new(0.04, 0, 0.73, 0)
    RecordBtn.Size = UDim2.new(0.22, 0, 0, 42)
    RecordBtn.Font = Enum.Font.GothamBold
    RecordBtn.Text = "🔴 Grabar [REC]"
    RecordBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    RecordBtn.TextSize = 11
    Instance.new("UICorner", RecordBtn).CornerRadius = UDim.new(0, 6)

    RecordBtn.MouseButton1Click:Connect(function()
        if not selectedPart then
            Rayfield:Notify({Title = "Aviso", Content = "Selecciona una pieza en el mundo primero.", Duration = 2})
            return
        end
        isRecording = not isRecording
        if isRecording then
            recordedFrames = {}
            recordTime = 0
            RecordBtn.BackgroundColor3 = Color3.fromRGB(50, 200, 50)
            RecordBtn.Text = "⏹️ Grabando..."
            StatusLabel.Text = "Grabando transformaciones F3X..."
            
            recordConnection = RunService.RenderStepped:Connect(function(dt)
                if selectedPart and isRecording then
                    recordTime = recordTime + dt
                    table.insert(recordedFrames, {
                        CFrame = selectedPart.CFrame,
                        Time = recordTime
                    })
                    RenderKeyframeNodes()
                end
            end)
        else
            if recordConnection then recordConnection:Disconnect() end
            RecordBtn.BackgroundColor3 = Color3.fromRGB(200, 50, 50)
            RecordBtn.Text = "🔴 Grabar [REC]"
            StatusLabel.Text = "Grabación terminada. Total keyframes: " .. #recordedFrames
        end
    end)

    -- Botón Reproducer
    local PlayBtn = Instance.new("TextButton", Frame)
    PlayBtn.BackgroundColor3 = Color3.fromRGB(0, 170, 255)
    PlayBtn.Position = UDim2.new(0.28, 0, 0.73, 0)
    PlayBtn.Size = UDim2.new(0.22, 0, 0, 42)
    PlayBtn.Font = Enum.Font.GothamBold
    PlayBtn.Text = "▶️ Play"
    PlayBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    PlayBtn.TextSize = 11
    Instance.new("UICorner", PlayBtn).CornerRadius = UDim.new(0, 6)

    PlayBtn.MouseButton1Click:Connect(function()
        if not selectedPart or #recordedFrames == 0 then
            Rayfield:Notify({Title = "Aviso", Content = "No hay animación grabada.", Duration = 2})
            return
        end
        task.spawn(function()
            isPlayingAnimation = true
            StatusLabel.Text = "Reproduciendo animación..."
            for _, kf in ipairs(recordedFrames) do
                if selectedPart and isPlayingAnimation then
                    selectedPart.CFrame = kf.CFrame
                    task.wait(0.03)
                end
            end
            StatusLabel.Text = "Reproducción completada."
        end)
    end)

    -- Botón Actualizar Keyframe Seleccionado
    local UpdateKfBtn = Instance.new("TextButton", Frame)
    UpdateKfBtn.BackgroundColor3 = Color3.fromRGB(150, 100, 0)
    UpdateKfBtn.Position = UDim2.new(0.52, 0, 0.73, 0)
    UpdateKfBtn.Size = UDim2.new(0.22, 0, 0, 42)
    UpdateKfBtn.Font = Enum.Font.GothamBold
    UpdateKfBtn.Text = "💾 Actualizar KF"
    UpdateKfBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    UpdateKfBtn.TextSize = 11
    Instance.new("UICorner", UpdateKfBtn).CornerRadius = UDim.new(0, 6)

    UpdateKfBtn.MouseButton1Click:Connect(function()
        if selectedKeyframeIndex and selectedPart and recordedFrames[selectedKeyframeIndex] then
            recordedFrames[selectedKeyframeIndex].CFrame = selectedPart.CFrame
            Rayfield:Notify({Title = "Keyframe Actualizado", Content = "Posición guardada en el nodo #" .. selectedKeyframeIndex, Duration = 2})
        else
            Rayfield:Notify({Title = "Error", Content = "Selecciona un keyframe en la línea de tiempo primero.", Duration = 2})
        end
    end)

    -- Botón Limpiar
    local ClearBtn = Instance.new("TextButton", Frame)
    ClearBtn.BackgroundColor3 = Color3.fromRGB(100, 100, 100)
    ClearBtn.Position = UDim2.new(0.76, 0, 0.73, 0)
    ClearBtn.Size = UDim2.new(0.2, 0, 0, 42)
    ClearBtn.Font = Enum.Font.GothamBold
    ClearBtn.Text = "🗑️ Borrar"
    ClearBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    ClearBtn.TextSize = 11
    Instance.new("UICorner", ClearBtn).CornerRadius = UDim.new(0, 6)

    ClearBtn.MouseButton1Click:Connect(function()
        recordedFrames = {}
        selectedKeyframeIndex = nil
        RenderKeyframeNodes()
        StatusLabel.Text = "Timeline limpia."
    end)

    local Close = Instance.new("TextButton", Frame)
    Close.BackgroundColor3 = Color3.fromRGB(200, 50, 50)
    Close.Position = UDim2.new(0.9, 0, 0.03, 0)
    Close.Size = UDim2.new(0, 25, 0, 25)
    Close.Text = "X"
    Close.TextColor3 = Color3.fromRGB(255, 255, 255)
    Instance.new("UICorner", Close).CornerRadius = UDim.new(0, 6)
    Close.MouseButton1Click:Connect(function()
        if recordConnection then recordConnection:Disconnect() end
        animatorGui2:Destroy()
        animatorGui2 = nil
    end)
end

-- ====================================================================================
-- MINI UI 1 DE ANIMACIÓN: SELECCIÓN Y CONTROL DE ROTACIÓN RÁPIDA F3X
-- ====================================================================================
local function CreateAnimatorUI_1()
    if animatorGui1 then animatorGui1:Destroy() end
    animatorGui1 = Instance.new("ScreenGui", CoreGui)
    animatorGui1.Name = "StudioAnimatorUI_1"
    animatorGui1.ResetOnSpawn = false

    local Frame = Instance.new("Frame", animatorGui1)
    Frame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
    Frame.Position = UDim2.new(0.05, 0, 0.4, 0)
    Frame.Size = UDim2.new(0, 230, 0, 270)
    Frame.BorderSizePixel = 0
    Frame.Active = true
    Frame.Draggable = true

    Instance.new("UICorner", Frame).CornerRadius = UDim.new(0, 10)
    local s = Instance.new("UIStroke", Frame)
    s.Color = Color3.fromRGB(0, 170, 255)
    s.Thickness = 2

    local Title = Instance.new("TextButton", Frame)
    Title.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
    Title.Size = UDim2.new(1, 0, 0, 35)
    Title.Font = Enum.Font.GothamBold
    Title.Text = "🎯 Selector & Giros F3X"
    Title.TextColor3 = Color3.fromRGB(255, 255, 255)
    Title.TextSize = 12
    Instance.new("UICorner", Title).CornerRadius = UDim.new(0, 10)

    local InfoLabel = Instance.new("TextLabel", Frame)
    InfoLabel.Position = UDim2.new(0.05, 0, 0.15, 0)
    InfoLabel.Size = UDim2.new(0.9, 0, 0, 30)
    InfoLabel.BackgroundTransparency = 1
    InfoLabel.Font = Enum.Font.Gotham
    InfoLabel.Text = "Objeto: Ninguno"
    InfoLabel.TextColor3 = Color3.fromRGB(180, 180, 180)
    InfoLabel.TextSize = 11

    task.spawn(function()
        while animatorGui1 and animatorGui1.Parent do
            if selectedPart then InfoLabel.Text = "Objeto: " .. selectedPart.Name
            else InfoLabel.Text = "Objeto: Ninguno" end
            task.wait(0.2)
        end
    end)

    local function MakeBtn(text, yPos, callback)
        local btn = Instance.new("TextButton", Frame)
        btn.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
        btn.Position = UDim2.new(0.08, 0, 0, yPos)
        btn.Size = UDim2.new(0.84, 0, 0, 32)
        btn.Font = Enum.Font.GothamSemibold
        btn.Text = text
        btn.TextColor3 = Color3.fromRGB(255, 255, 255)
        btn.TextSize = 12
        Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 6)
        btn.MouseButton1Click:Connect(callback)
    end

    MakeBtn("🔄 Girar +45° Eje Y", 60, function()
        if selectedPart then selectedPart.CFrame = selectedPart.CFrame * CFrame.Angles(0, math.rad(45), 0) end
    end)
    MakeBtn("🔄 Girar +90° Eje Y", 100, function()
        if selectedPart then selectedPart.CFrame = selectedPart.CFrame * CFrame.Angles(0, math.rad(90), 0) end
    end)
    MakeBtn("🔄 Girar +90° Eje X", 140, function()
        if selectedPart then selectedPart.CFrame = selectedPart.CFrame * CFrame.Angles(math.rad(90), 0, 0) end
    end)
    MakeBtn("📍 Enfocar Cámara", 180, function()
        if selectedPart and LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then
            LocalPlayer.Character.HumanoidRootPart.CFrame = selectedPart.CFrame + Vector3.new(0, 5, 0)
        end
    end)

    local Close = Instance.new("TextButton", Frame)
    Close.BackgroundColor3 = Color3.fromRGB(200, 50, 50)
    Close.Position = UDim2.new(0.85, 0, 0.85, 0)
    Close.Size = UDim2.new(0, 25, 0, 25)
    Close.Text = "X"
    Close.TextColor3 = Color3.fromRGB(255, 255, 255)
    Instance.new("UICorner", Close).CornerRadius = UDim.new(0, 6)
    Close.MouseButton1Click:Connect(function() animatorGui1:Destroy() animatorGui1 = nil end)
end

-- ====================================================================================
-- MINI UI EDITOR DE SCRIPTS (LOCAL Y MODULE SCRIPT PERMANENTE)
-- ====================================================================================
local function CreateScriptEditor_UI()
    if scriptEditorGui then scriptEditorGui:Destroy() end
    scriptEditorGui = Instance.new("ScreenGui", CoreGui)
    scriptEditorGui.Name = "StudioScriptEditor"
    scriptEditorGui.ResetOnSpawn = false

    local Frame = Instance.new("Frame", scriptEditorGui)
    Frame.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
    Frame.Position = UDim2.new(0.3, 0, 0.2, 0)
    Frame.Size = UDim2.new(0, 480, 0, 340)
    Frame.BorderSizePixel = 0
    Frame.Active = true
    Frame.Draggable = true

    Instance.new("UICorner", Frame).CornerRadius = UDim.new(0, 12)
    local s = Instance.new("UIStroke", Frame)
    s.Color = Color3.fromRGB(0, 255, 128)
    s.Thickness = 2

    local Title = Instance.new("TextLabel", Frame)
    Title.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
    Title.Size = UDim2.new(1, 0, 0, 40)
    Title.Font = Enum.Font.GothamBold
    Title.Text = "💻 Studio Script & Module Creator (Persistente)"
    Title.TextColor3 = Color3.fromRGB(255, 255, 255)
    Title.TextSize = 13
    Instance.new("UICorner", Title).CornerRadius = UDim.new(0, 12)

    local CodeBox = Instance.new("TextBox", Frame)
    CodeBox.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
    CodeBox.Position = UDim2.new(0.05, 0, 0.16, 0)
    CodeBox.Size = UDim2.new(0.9, 0, 0.54, 0)
    CodeBox.Font = Enum.Font.Code
    CodeBox.PlaceholderText = "-- Escribe tu código aquí..."
    CodeBox.Text = "print('¡Script ejecutado de forma permanente en Studio Lite!')"
    CodeBox.TextColor3 = Color3.fromRGB(0, 255, 128)
    CodeBox.TextSize = 13
    CodeBox.ClearTextOnFocus = false
    CodeBox.MultiLine = true
    CodeBox.TextXAlignment = Enum.TextXAlignment.Left
    CodeBox.TextYAlignment = Enum.TextYAlignment.Top
    Instance.new("UICorner", CodeBox).CornerRadius = UDim.new(0, 6)

    local ModeBtn = Instance.new("TextButton", Frame)
    ModeBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
    ModeBtn.Position = UDim2.new(0.05, 0, 0.74, 0)
    ModeBtn.Size = UDim2.new(0.42, 0, 0, 38)
    ModeBtn.Font = Enum.Font.GothamBold
    ModeBtn.Text = "Tipo: LocalScript"
    ModeBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    ModeBtn.TextSize = 12
    Instance.new("UICorner", ModeBtn).CornerRadius = UDim.new(0, 6)
    
    local scriptType = "LocalScript"
    ModeBtn.MouseButton1Click:Connect(function()
        if scriptType == "LocalScript" then
            scriptType = "ModuleScript"
            ModeBtn.Text = "Tipo: ModuleScript"
        else
            scriptType = "LocalScript"
            ModeBtn.Text = "Tipo: LocalScript"
        end
    end)

    local InjectBtn = Instance.new("TextButton", Frame)
    InjectBtn.BackgroundColor3 = Color3.fromRGB(0, 170, 255)
    InjectBtn.Position = UDim2.new(0.53, 0, 0.74, 0)
    InjectBtn.Size = UDim2.new(0.42, 0, 0, 38)
    InjectBtn.Font = Enum.Font.GothamBold
    InjectBtn.Text = "💾 Inyectar & Guardar"
    InjectBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    InjectBtn.TextSize = 12
    Instance.new("UICorner", InjectBtn).CornerRadius = UDim.new(0, 6)

    InjectBtn.MouseButton1Click:Connect(function()
        local codeToRun = CodeBox.Text
        if scriptType == "LocalScript" then
            local success, func = pcall(function() return loadstring(codeToRun) end)
            if success and func then
                task.spawn(func)
                Rayfield:Notify({Title = "Ejecutado", Content = "LocalScript activo permanente.", Duration = 3})
            else
                Rayfield:Notify({Title = "Error", Content = "Revisa la sintaxis de tu código.", Duration = 3})
            end
        else
            local mod = Instance.new("ModuleScript", ReplicatedStorage)
            mod.Name = "CustomStudioModule"
            Rayfield:Notify({Title = "ModuleScript Guardado", Content = "Guardado en ReplicatedStorage.", Duration = 3})
        end
    end)

    local Close = Instance.new("TextButton", Frame)
    Close.BackgroundColor3 = Color3.fromRGB(200, 50, 50)
    Close.Position = UDim2.new(0.9, 0, 0.02, 0)
    Close.Size = UDim2.new(0, 30, 0, 30)
    Close.Text = "X"
    Close.TextColor3 = Color3.fromRGB(255, 255, 255)
    Instance.new("UICorner", Close).CornerRadius = UDim.new(0, 6)
    Close.MouseButton1Click:Connect(function() scriptEditorGui:Destroy() scriptEditorGui = nil end)
end

-- ====================================================================================
-- TABS DE RAYFIELD (COMPLETAS Y GOD-TIER)
-- ====================================================================================
local TabModel = Window:CreateTab("Modelado & F3X Gizmos", 4483362458)
local TabAnimators = Window:CreateTab("Animador (2 UIs con Keyframes)", 4483362458)
local TabScripting = Window:CreateTab("Scripts & Módulos", 4483362458)
local TabAssets = Window:CreateTab("Modelos & Mapas Pro", 4483362458)
local TabUIEditor = Window:CreateTab("UI & HUD Builder", 4483362458)
local TabAnimation = Window:CreateTab("Animación de Personaje", 4483362458)
local TabServer = Window:CreateTab("Server & Network", 4483362458)
local TabTools = Window:CreateTab("Dex RE & Studio Suite", 4483362458)

-- 1. MODELADO & F3X GIZMOS
TabModel:CreateSection("Panel Flotante CCA / F3X")
TabModel:CreateToggle({
   Name = "Activar Mini UI F3X Gizmos Nativos",
   CurrentValue = false,
   Flag = "CCAToggle", 
   Callback = function(Value)
        if Value then
            CreateCCA_UI()
            MoveGizmo.Parent = CoreGui ScaleGizmo.Parent = CoreGui RotateGizmo.Parent = CoreGui
            Rayfield:Notify({Title = "F3X Activado", Content = "Gizmos suaves listos.", Duration = 2})
        else
            if ccaGui then ccaGui:Destroy() ccaGui = nil end
            HideAllGizmos()
        end
   end,
})

TabModel:CreateSection("Primitivas del Mundo")
TabModel:CreateButton({Name = "➕ Crear Bloque", Callback = function()
    local p = Instance.new("Part", workspace) p.Size = Vector3.new(4, 1, 4) p.Position = LocalPlayer.Character.HumanoidRootPart.Position + Vector3.new(0, 3, 5) p.BrickColor = BrickColor.random() selectedPart = p UpdateGizmos()
end})
TabModel:CreateButton({Name = "➕ Crear Cilindro", Callback = function()
    local p = Instance.new("Part", workspace) p.Shape = Enum.PartType.Cylinder p.Size = Vector3.new(4, 2, 2) p.Position = LocalPlayer.Character.HumanoidRootPart.Position + Vector3.new(0, 3, 5) p.BrickColor = BrickColor.random() selectedPart = p UpdateGizmos()
end})
TabModel:CreateButton({Name = "➕ Crear Esfera", Callback = function()
    local p = Instance.new("Part", workspace) p.Shape = Enum.PartType.Ball p.Size = Vector3.new(3, 3, 3) p.Position = LocalPlayer.Character.HumanoidRootPart.Position + Vector3.new(0, 3, 5) p.BrickColor = BrickColor.random() selectedPart = p UpdateGizmos()
end})
TabModel:CreateButton({Name = "➕ Crear Cuña", Callback = function()
    local p = Instance.new("WedgePart", workspace) p.Size = Vector3.new(4, 2, 4) p.Position = LocalPlayer.Character.HumanoidRootPart.Position + Vector3.new(0, 3, 5) p.BrickColor = BrickColor.random() selectedPart = p UpdateGizmos()
end})

-- 2. ANIMADOR (2 UIS CON KEYFRAMES INTERACTIVOS)
TabAnimators:CreateSection("Control de UIs de Animación")
TabAnimators:CreateButton({
    Name = "🎯 Abrir UI 1: Selector y Rotación F3X",
    Callback = function()
        CreateAnimatorUI_1()
        Rayfield:Notify({Title = "UI 1 Abierta", Content = "Selector y giros rápidos listos.", Duration = 2})
    end,
})
TabAnimators:CreateButton({
    Name = "🎬 Abrir UI 2: Timeline con Keyframes Interactivos",
    Callback = function()
        CreateAnimatorUI_2()
        Rayfield:Notify({Title = "UI 2 Abierta", Content = "Selecciona y edita keyframes en la línea.", Duration = 2})
    end,
})

-- 3. SCRIPTS & MÓDULOS
TabScripting:CreateSection("Editor de Código Avanzado")
TabScripting:CreateButton({
    Name = "💻 Abrir Editor de LocalScripts / ModuleScripts",
    Callback = function()
        CreateScriptEditor_UI()
        Rayfield:Notify({Title = "Editor Abierto", Content = "Inyector permanente listo.", Duration = 3})
    end,
})

-- 4. MODELOS & MAPAS PRO
TabAssets:CreateSection("Entornos Realistas")
TabAssets:CreateButton({
    Name = "🌆 Generar Ciudad Completa con Iluminación",
    Callback = function()
        Lighting.GlobalShadows = true Lighting.Brightness = 2.5 Lighting.ClockTime = 14.5
        local mapFolder = Instance.new("Folder", workspace) mapFolder.Name = "GodCityMap"
        local ground = Instance.new("Part", mapFolder) ground.Size = Vector3.new(400, 1, 400) ground.Position = Vector3.new(0, -0.5, 0) ground.Anchored = true ground.BrickColor = BrickColor.new("Dark stone grey")
        for x = -3, 3 do
            for z = -3, 3 do
                if math.abs(x) > 0 or math.abs(z) > 0 then
                    local b = Instance.new("Part", mapFolder)
                    b.Size = Vector3.new(20, math.random(50, 110), 20)
                    b.Position = Vector3.new(x * 45, b.Size.Y/2, z * 45)
                    b.Anchored = true b.Material = Enum.Material.Concrete b.BrickColor = BrickColor.random()
                end
            end
        end
        Rayfield:Notify({Title = "Mapa Creado", Content = "Ciudad generada con éxito.", Duration = 3})
    end,
})

TabAssets:CreateButton({
    Name = "🚗 Spawnear Carro Conducible",
    Callback = function()
        local char = LocalPlayer.Character if not char or not char:FindFirstChild("HumanoidRootPart") then return end
        local car = Instance.new("Model", workspace) car.Name = "GodProCar"
        local chassis = Instance.new("Part", car) chassis.Name = "Chassis" chassis.Size = Vector3.new(4, 1.5, 8) chassis.Position = char.HumanoidRootPart.Position + Vector3.new(0, 3, 0) chassis.BrickColor = BrickColor.new("Bright red") chassis.Material = Enum.Material.Neon chassis.Anchored = false
        local seat = Instance.new("VehicleSeat", car) seat.Size = Vector3.new(2, 1, 2) seat.Position = chassis.Position + Vector3.new(0, 1, 0) seat.CFrame = chassis.CFrame seat.Anchored = false
        local w = Instance.new("WeldConstraint", chassis) w.Part0 = chassis w.Part1 = seat
        
        local function makeWheel(pos)
            local wheel = Instance.new("Part", car) wheel.Shape = Enum.PartType.Cylinder wheel.Size = Vector3.new(1, 2, 2) wheel.CFrame = chassis.CFrame * CFrame.new(pos) * CFrame.Angles(0,0,math.rad(90)) wheel.BrickColor = BrickColor.new("Black") wheel.Anchored = false
            local wc = Instance.new("WeldConstraint", chassis) wc.Part0 = chassis wc.Part1 = wheel
        end
        makeWheel(Vector3.new(-2.2, -0.5, 2.5)) makeWheel(Vector3.new(2.2, -0.5, 2.5))
        makeWheel(Vector3.new(-2.2, -0.5, -2.5)) makeWheel(Vector3.new(2.2, -0.5, -2.5))
        Rayfield:Notify({Title = "Carro Listo", Content = "Súbete al asiento rojo.", Duration = 3})
    end,
})

-- 5. UI & HUD BUILDER
TabUIEditor:CreateSection("Interfaces Gráficas")
TabUIEditor:CreateButton({
    Name = "📱 Inyectar Plantilla UI HUD Completa",
    Callback = function()
        local sg = Instance.new("ScreenGui", CoreGui) sg.Name = "GodStudioHUD"
        local f = Instance.new("Frame", sg) f.Size = UDim2.new(0, 320, 0, 180) f.Position = UDim2.new(0.5, -160, 0.1, 0) f.BackgroundColor3 = Color3.fromRGB(35, 35, 35) f.Active = true f.Draggable = true
        Instance.new("UICorner", f).CornerRadius = UDim.new(0, 10)
        local t = Instance.new("TextLabel", f) t.Size = UDim2.new(1, 0, 0, 40) t.BackgroundColor3 = Color3.fromRGB(20, 20, 20) t.Text = "HUD Personalizado" t.TextColor3 = Color3.fromRGB(255, 255, 255) t.Font = Enum.Font.GothamBold t.TextSize = 14
        Instance.new("UICorner", t).CornerRadius = UDim.new(0, 10)
        local btn = Instance.new("TextButton", f) btn.Size = UDim2.new(0.8, 0, 0, 40) btn.Position = UDim2.new(0.1, 0, 0.5, 0) btn.BackgroundColor3 = Color3.fromRGB(0, 170, 255) btn.Text = "Botón Interactivo" btn.TextColor3 = Color3.fromRGB(255, 255, 255) btn.Font = Enum.Font.GothamSemibold
        Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 6)
        Rayfield:Notify({Title = "UI Creada", Content = "HUD inyectado.", Duration = 3})
    end,
})

-- 6. ANIMACIÓN DE PERSONAJE
TabAnimation:CreateSection("Emotes y Movimiento")
TabAnimation:CreateButton({
    Name = "💃 Reproducir Animación de Baile Pro",
    Callback = function()
        local hum = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
        if hum then
            local anim = Instance.new("Animation") anim.AnimationId = "rbxassetid://507771019"
            local track = hum:LoadAnimation(anim) track:Play()
            Rayfield:Notify({Title = "Animación", Content = "Baile reproduciéndose.", Duration = 2})
        end
    end,
})

-- 7. SERVER & NETWORK
TabServer:CreateSection("Herramientas de Servidor")
TabServer:CreateButton({
    Name = "🌐 Crear RemoteEvent Global",
    Callback = function()
        local re = Instance.new("RemoteEvent") re.Name = "GodStudioEvent" re.Parent = ReplicatedStorage
        Rayfield:Notify({Title = "Red", Content = "RemoteEvent creado en ReplicatedStorage.", Duration = 3})
    end,
})

-- 8. DEX RE & STUDIO SUITE (DEX RE PRO OFICIAL)
TabTools:CreateSection("Explorador Avanzado Dex RE")
TabTools:CreateButton({
    Name = "💉 Inyectar Dex RE (Explorer & Properties God-Tier Oficial)",
    Callback = function()
        loadstring(game:HttpGet("https://raw.githubusercontent.com/AZUR-Common/Dex-RE/main/init.lua", true))()
        Rayfield:Notify({Title = "Dex RE Pro", Content = "Panel avanzado de Explorer y Properties inyectado.", Duration = 4})
    end,
})

TabTools:CreateSection("Ambiente")
TabTools:CreateSlider({
    Name = "Hora del Día",
    Range = {0, 24}, Increment = 1, Suffix = "Horas", CurrentValue = 14, Flag = "Time",
    Callback = function(v) Lighting.ClockTime = v end,
})

Features & Information

Script para Studio lite.

Community Comments (2)

beam12342345beam12342345Sep 5, 2026

ez to crack

Replying to @beam12342345
GlodonGlodonSep 6, 2026

@beam12342345 ¡Thank you, I'll be repairing it!

More Scripts for Studio Lite