Z hub leaked
Key RequiredUniversal

Z hub leaked

Universal Scripttrueethiopian48trueethiopian48 1.2K views 793 executesUpdated Feb 24, 2026
Unrated
00
Lua Script•2465 lines (60400 chars)
-- [[ Z-SLX HUB: MULTI-GAME LOCK (FIXED + KICK) ]]
local ID_Sierra = 17045823120
local ID_Rancheria = 17209126270
local CurrentID = game.PlaceId

-- Función de notificación segura (Nativa de Roblox)
local function NotificarSistema(titulo, texto)
    game:GetService("StarterGui"):SetCore("SendNotification", {
        Title = titulo,
        Text = texto,
        Duration = 5,
        Icon = "rbxassetid://15103734123"
    })
end

-- [[ VERIFICACIÓN DE ENTRADA ]]
if CurrentID == ID_Sierra or CurrentID == ID_Rancheria then
    local nombreJuego = (CurrentID == ID_Sierra) and "Sierra México" or "Ranchería Nuevo León"
    NotificarSistema("Z-SLX PREMIUM 👑", "Bienvenido a " .. nombreJuego)
else
    -- Notificación rápida antes del susto
    NotificarSistema("🚫 Z-SLX ERROR", "Juego no compatible. ID: " .. CurrentID)
    task.wait(1)
    
    -- Kick con mensaje de "Cheat Detected" para el curioso
    game.Players.LocalPlayer:Kick("\n[ANTI-CHEAT SYSTEM]\n\nSecurity Violation Detected.\nReason: Cheat Detection (External Library Injection).\nError Code: 0x8273615")
    return -- Detiene todo
end

-- // 1. AQUÍ CARGAS LA LIBRERÍA (Rayfield) // --
local Rayfield = loadstring(game:HttpGet('https://sirius.menu/rayfield'))()

local Window = Rayfield:CreateWindow({
   Name = "| Z hub | by @znoreste",
   LoadingTitle = "Load Script For | Sierra, Mexico | Rancheria, Nuevo leon",
   ConfigurationSaving = {Enabled = false}
})

-- [[ VARIABLES GLOBALES ]]
_G.AimbotEnabled = false
_G.TeamCheck = false
_G.WallCheck = false
_G.AimbotStrength = 5
_G.FOVSize = 80
_G.ShowFOV = false
_G.FOVRainbow = false
_G.AimPart = "HumanoidRootPart" -- Defecto: Torso

-- [[ CONFIGURACIÓN FOV ]]
local FOVCircle = Drawing.new("Circle")
FOVCircle.Thickness = 2
FOVCircle.Filled = false
FOVCircle.Transparency = 1
FOVCircle.NumSides = 60

local TabCombat = Window:CreateTab("COMBAT 💻", 4483362458)

TabCombat:CreateSection(" -- Aimbot X -- ")

-- ACTIVACIÓN
TabCombat:CreateToggle({
   Name = "Aimbot (🔥)",
   CurrentValue = false,
   Callback = function(Value) _G.AimbotEnabled = Value end,
})

-- LISTA DE OBJETIVOS (HEAD / TORSO)
TabCombat:CreateDropdown({
   Name = "Objetivo del Aimbot",
   Options = {"Head", "Torso"},
   CurrentOption = {"Torso"},
   MultipleOptions = false,
   Flag = "TargetDropdown",
   Callback = function(Option)
      if Option[1] == "Head" then
         _G.AimPart = "Head"
      else
         _G.AimPart = "HumanoidRootPart" -- Este es el Torso técnico
      end
      Rayfield:Notify({Title = "Z-Hub", Content = "Apuntando a: " .. Option[1], Duration = 2})
   end,
})

-- ANCLAJE
TabCombat:CreateSlider({
   Name = "Fuerza de Anclaje 1-15",
   Range = {1, 15},
   Increment = 1,
   CurrentValue = 5,
   Callback = function(Value) _G.AimbotStrength = Value end,
})

TabCombat:CreateToggle({
   Name = "Team Check",
   CurrentValue = false,
   Callback = function(Value) _G.TeamCheck = Value end,
})

TabCombat:CreateToggle({
   Name = "Wallcheck",
   CurrentValue = false,
   Callback = function(Value) _G.WallCheck = Value end,
})

TabCombat:CreateSlider({
   Name = "Fov Range",
   Range = {1, 120},
   Increment = 1,
   CurrentValue = 80,
   Callback = function(Value) _G.FOVSize = Value end,
})

TabCombat:CreateToggle({
   Name = "Fov",
   CurrentValue = false,
   Callback = function(Value) _G.ShowFOV = Value end,
})

TabCombat:CreateToggle({
   Name = "Fov Rainbow",
   CurrentValue = false,
   Callback = function(Value) _G.FOVRainbow = Value end,
})








-- Hit box

local SectionModular = TabCombat:CreateSection(" -- HitBox X -- ")

_G.HitboxTarget = "Torso" 
_G.HitboxSize_V1 = 20
_G.HitboxEnabled_V1 = false
_G.TeamCheck_V4 = true -- Valor inicial

TabCombat:CreateToggle({
   Name = "Hitbox (🔥)",
   CurrentValue = false,
   Callback = function(Value) 
      _G.HitboxEnabled_V1 = Value 
      if not Value then _G.ForceReset = true end 
   end,
})

-- [[ BOTÓN DE TEAMCHECK V4 ]]
TabCombat:CreateToggle({
   Name = "Team Check",
   CurrentValue = false,
   Callback = function(Value) 
      _G.TeamCheck_V4 = Value 
      _G.ForceReset = true -- Limpiamos por si cambian de equipo
      Rayfield:Notify({Title = "Z-Hub", Content = Value and "TeamCheck Activado" or "TeamCheck Desactivado", Duration = 2})
   end,
})

TabCombat:CreateDropdown({
   Name = "Objetivo ??",
   Options = {"Head", "Torso", "Huesos"},
   CurrentOption = {"Torso"},
   MultipleOptions = false,
   Callback = function(Option)
      _G.HitboxTarget = Option[1]
      _G.ForceReset = true -- Limpia para no encimar partes
      Rayfield:Notify({Title = "Z-Hub", Content = "Objetivo: " .. _G.HitboxTarget, Duration = 2})
   end,
})

TabCombat:CreateSlider({
   Name = "Tamaño 1-75",
   Range = {1, 75},
   Increment = 1,
   CurrentValue = 20,
   Callback = function(Value) 
      _G.HitboxSize_V1 = Value 
   end,
})







-- Tp kill





local SectionTP = TabCombat:CreateSection("Tp Kill V1 | 💀")

TabCombat:CreateToggle({
   Name = "Tp kill v1",
   CurrentValue = false,
   Callback = function(Value) _G.TPKillV6_Enabled = Value end,
})

-- OPCIÓN DE TEAM CHECK (A petición tuya we)
TabCombat:CreateToggle({
   Name = "Team Check",
   CurrentValue = false,
   Callback = function(Value) _G.TeamCheck_V6 = Value end,
})

_G.TargetPlayer = "ALL"

-- DROPDOWN ESTABLE
local PlayerDropdown = TabCombat:CreateDropdown({
   Name = "Seleccionar Objetivo 🎯",
   Options = {"ALL"}, 
   CurrentOption = {"ALL"},
   MultipleOptions = false,
   Flag = "TargetDropdown",
   Callback = function(Option)
      local Selected = type(Option) == "table" and Option[1] or Option
      _G.TargetPlayer = Selected
      Rayfield:Notify({
         Title = "Z-SLX HUNTER",
         Content = "Cazando a: " .. tostring(Selected),
         Duration = 2
      })
   end,
})

-- FUNCIÓN PARA ACTUALIZAR SIN BUG
local function UpdateList()
    local pList = {"ALL"}
    for _, v in pairs(game:GetService("Players"):GetPlayers()) do
        if v ~= game.Players.LocalPlayer then
            table.insert(pList, v.Name)
        end
    end
    PlayerDropdown:Refresh(pList, true)
end

-- ACTUALIZAR AUTOMÁTICAMENTE CUANDO ALGUIEN ENTRA O SALE
game.Players.PlayerAdded:Connect(UpdateList)
game.Players.PlayerRemoving:Connect(UpdateList)

-- PRIMERA CARGA AL EJECUTAR
UpdateList()

-- BOTÓN OPCIONAL (Por si quieres forzarlo tú)
TabCombat:CreateButton({
   Name = "Forzar Refresco de Lista 🔄",
   Callback = function()
      UpdateList()
      Rayfield:Notify({Title = "Z-SLX", Content = "Lista actualizada.", Duration = 1})
   end,
})

-- INPUT DE DISTANCIA
TabCombat:CreateInput({
   Name = "Distancia de Cabeza",
   PlaceholderText = "Escribe 1-15 (Ej: 5)",
   RemoveTextAfterFocusLost = false,
   Callback = function(Text)
      local num = tonumber(Text)
      if num then _G.V6_Dist = num end
   end,
})




















--- Fake lag v1 














local SectionFl = TabCombat:CreateSection("Fake lag 💻")

_G.FakeLag_Enabled = false
_G.FreezeTime = 5 -- Tiempo por defecto

TabCombat:CreateButton({
   Name = "ACTIVAR HARD-FREEZE ❄️",
   Callback = function()
      if not _G.FakeLag_Enabled then
         _G.FakeLag_Enabled = true
         Rayfield:Notify({Title = "Z-SLX", Content = "Enemigos congelados por " .. _G.FreezeTime .. " segundos!", Duration = 3})
         
         -- TIMER PARA DESACTIVAR SOLO
         task.delay(_G.FreezeTime, function()
            _G.FakeLag_Enabled = false
            Rayfield:Notify({Title = "Z-SLX", Content = "Tiempo agotado. Descongelando...", Duration = 2})
         end)
      end
   end,
})

TabCombat:CreateSlider({
   Name = "Segundos de Congelamiento",
   Range = {1, 20},
   Increment = 1,
   CurrentValue = 5,
   Callback = function(Value) _G.FreezeTime = Value end,
})

























local Sectionhit = TabCombat:CreateSection("Anti Hit 🤺")

-- [[ CONFIGURACIÓN ANTI-HIT Z-SLX ]]
_G.AntiHit_Enabled = false
_G.AntiHit_Radius = 10 

TabCombat:CreateToggle({
   Name = "Activar Anti-Hit Aura",
   CurrentValue = false,
   Callback = function(Value) 
      _G.AntiHit_Enabled = Value 
      Rayfield:Notify({
         Title = "Z-SLX DEFENSE",
         Content = Value and "Aura activada. Nadie se te va a acercar, we." or "Aura desactivada.",
         Duration = 2
      })
   end,
})

TabCombat:CreateSlider({
   Name = "Radio de Detección",
   Range = {5, 30},
   Increment = 1,
   CurrentValue = 10,
   Callback = function(Value) 
      _G.AntiHit_Radius = Value 
   end,
})
























local SectionGhost = TabCombat:CreateSection("Invisible FE 👻")

TabCombat:CreateToggle({
   Name = "Activar Invisible FE (FIX)",
   CurrentValue = false,
   Callback = function(Value) 
      _G.ModoGhostFE = Value 
      -- Esto te pone transparente solo a ti para que sepas que jaló
      if game.Players.LocalPlayer.Character then
          for _, v in pairs(game.Players.LocalPlayer.Character:GetDescendants()) do
              if v:IsA("BasePart") or v:IsA("Decal") then
                  v.Transparency = Value and 0.5 or 0
              end
          end
      end
      Rayfield:Notify({
         Title = "Z-SLX GHOST",
         Content = Value and "Invisible FE Activo. ¡A darle, we!" or "Regresando a la normalidad.",
         Duration = 2
      })
   end,
})




















-- categorias



local TabVisuals = Window:CreateTab("Visuals 🏈", 4483362458)


















local SectionVisuals = TabVisuals:CreateSection("Z-SLX: VISIÓN NOCTURNA 🟢")

TabVisuals:CreateToggle({
   Name = "Night Vision Z",
   CurrentValue = false,
   Callback = function(Value) 
      _G.NightVision_Enabled = Value 
      Rayfield:Notify({Title = "Z-SLX", Content = Value and "Visión Nocturna ON" or "Visión Nocturna OFF", Duration = 2})
   end,
})

















local SectionCam = TabVisuals:CreateSection("Z-SLX: CÁMARA & VISIÓN 👁️")

_G.CustomFOV = 70 -- FOV por defecto de Roblox

TabVisuals:CreateSlider({
   Name = "(FOV)",
   Range = {1, 120},
   Increment = 1,
   CurrentValue = 70,
   Callback = function(Value) 
      _G.CustomFOV = Value 
   end,
})






















local SectionTracers = TabVisuals:CreateSection("Z-SLX: TRACERS CONFIG 📏")

_G.Tracers_Enabled = false
_G.Tracer_Origin = "Abajo" -- Por defecto sale de los pies

-- 1. SWITCH DE ACTIVAR
TabVisuals:CreateToggle({
   Name = "Activar Tracers (Team Color)",
   CurrentValue = false,
   Flag = "TracersToggle",
   Callback = function(Value)
      _G.Tracers_Enabled = Value
   end,
})

-- 2. LISTA DE POSICIÓN (DROPDOWN)
TabVisuals:CreateDropdown({
   Name = "Posición de Salida",
   Options = {"Abajo", "Centro", "Arriba"},
   CurrentOption = {"Abajo"},
   MultipleOptions = false,
   Flag = "TracerPos",
   Callback = function(Option)
      -- Rayfield devuelve una tabla, agarramos el primero
      _G.Tracer_Origin = Option[1] 
   end,
})




























local SectionShadow = TabVisuals:CreateSection("Z-SLX: Esp v2")

_G.Shadow_Enabled = false
_G.Shadow_Fill = 0 -- Transparencia del relleno (0 = Sólido, 1 = Invisible)
_G.Shadow_Outline = 0 -- Transparencia del borde (0 = Visible, 1 = Invisible)

TabVisuals:CreateToggle({
   Name = "Esp v2",
   CurrentValue = false,
   Callback = function(Value) 
      _G.Shadow_Enabled = Value 
   end,
})

TabVisuals:CreateSlider({
   Name = "Transparenci",
   Range = {0, 1},
   Increment = 0.1,
   CurrentValue = 0,
   Callback = function(Value) 
      _G.Shadow_Fill = Value 
   end,
})

TabVisuals:CreateSlider({
   Name = "Transparenci",
   Range = {0, 1},
   Increment = 0.1,
   CurrentValue = 0,
   Callback = function(Value) 
      _G.Shadow_Outline = Value 
   end,
})






















local SectionESP = TabVisuals:CreateSection("Z-SLX: ESP BOX 📦")

_G.ESP_Enabled = false 

TabVisuals:CreateToggle({
   Name = "ESP Box (Team Color)",
   CurrentValue = false,
   Flag = "ESPBoxToggle",
   Callback = function(Value)
      _G.ESP_Enabled = Value
   end,
})

























local SectionInv = TabVisuals:CreateSection("Z-SLX: VISUAL INVENTORY 🎒")

_G.VisualInv_Enabled = false

TabVisuals:CreateToggle({
   Name = "Inventory GUI (Cuadros Reales)",
   CurrentValue = false,
   Flag = "InvGUI",
   Callback = function(Value)
      _G.VisualInv_Enabled = Value
   end,
})





















local TabBypass = Window:CreateTab("Bypass ⚓", 4483362458)

























-- [[ Z-SLX: FLY UNIVERSAL ]]
local SectionFlyHub = TabBypass:CreateSection("Z-SLX: FLY Universal ✈️")

_G.ZSLX_Fly = false
_G.ZSLX_FlySpeed = 50 -- Velocidad por defecto

-- Botón de Prender/Apagar
TabBypass:CreateToggle({
    Name = "Fly (Global)",
    CurrentValue = false,
    Flag = "FlyToggleHub",
    Callback = function(Value)
        _G.ZSLX_Fly = Value
    end,
})

-- Caja para escribir la velocidad exacta
TabBypass:CreateInput({
    Name = "Velocidad del Fly",
    PlaceholderText = "Ej: 120 (Escribe un número)",
    RemoveTextAfterFocusLost = false,
    Callback = function(Text)
        local num = tonumber(Text)
        if num then
            _G.ZSLX_FlySpeed = num
            print("Z-SLX: Velocidad de Fly: " .. num)
        end
    end,
})










































local TabSword = Window:CreateTab(" Others ", 4483362458)



































-- [[ Z-SLX: MODO MINECRAFT 144p (FPS AL MÁXIMO) ]]
local SectionSwordFPS = TabSword:CreateSection("Z-SLX: FPS⚡")

TabSword:CreateButton({
   Name = "🚀 FPS Boost",
   Callback = function()
        -- 1. BAJAR LA CALIDAD INTERNA DEL MOTOR (EL SECRETO)
        settings().Rendering.QualityLevel = Enum.QualityLevel.Level01
        
        local g = game
        local w = g.Workspace
        local l = g.Lighting
        local t = w.Terrain

        -- 2. MATAR LA LUZ Y EL CIELO
        l.GlobalShadows = false
        l.FogEnd = 9e9
        l.Brightness = 0 -- Cero brillo bonito
        l.Ambient = Color3.fromRGB(120, 120, 120) -- Luz gris plana y fea
        l.OutdoorAmbient = Color3.fromRGB(120, 120, 120)

        -- Destruir el cielo y los filtros
        for _, v in pairs(l:GetChildren()) do
            if v:IsA("Atmosphere") or v:IsA("Sky") or v:IsA("PostEffect") or v:IsA("ColorCorrectionEffect") or v:IsA("BloomEffect") or v:IsA("BlurEffect") or v:IsA("SunRaysEffect") then
                v:Destroy()
            end
        end

        -- 3. TERRENO PLANO (SIN PASTO, SIN AGUA REALISTA)
        t.WaterWaveSize = 0
        t.WaterWaveSpeed = 0
        t.WaterReflectance = 0
        t.WaterTransparency = 1
        t.Decoration = false 

        -- Seguro contra pasto necio
        t:GetPropertyChangedSignal("Decoration"):Connect(function()
            t.Decoration = false
        end)

        -- 4. EL CONVERTIDOR A MODO PAPA
        local function PotatoMode(v)
            pcall(function()
                if v:IsA("BasePart") or v:IsA("MeshPart") then
                    v.Material = Enum.Material.Plastic -- Plástico normal (más feo y ligero)
                    v.Reflectance = 0
                    v.CastShadow = false
                    if v:IsA("MeshPart") then
                        v.TextureID = "" -- Borra la textura 3D del objeto
                    end
                elseif v:IsA("Decal") or v:IsA("Texture") or v:IsA("SurfaceAppearance") then
                    v:Destroy() -- Eliminar imágenes pegadas
                elseif v:IsA("ParticleEmitter") or v:IsA("Trail") or v:IsA("Smoke") or v:IsA("Fire") or v:IsA("Sparkles") then
                    v:Destroy()
                elseif v:IsA("SpecialMesh") then
                    v.TextureId = ""
                end
            end)
        end

        -- Bucle infernal para destruir los gráficos de todo el mapa
        task.spawn(function()
            for i, v in pairs(w:GetDescendants()) do
                PotatoMode(v)
                if i % 250 == 0 then task.wait() end -- Anti-crasheo
            end
            print("✅ Z-SLX: GRÁFICOS DESTRUIDOS. BIENVENIDO A 1998.")
        end)

        -- Para lo que vaya spawneando (balas, jugadores nuevos, etc.)
        w.DescendantAdded:Connect(function(v)
            task.spawn(function() PotatoMode(v) end)
        end)
   end,
})

-- [[ Z-SLX: MONITOR DE STATS (FPS / PING / MEMORIA) ]]
local SectionStats = TabSword:CreateSection("Z-SLX: MONITOR DE SISTEMA 📊")

_G.StatsHUD_Enabled = false

TabSword:CreateToggle({
   Name = "Mostrar Monitor (FPS/PING)",
   CurrentValue = false,
   Flag = "ToggleStats",
   Callback = function(Value)
      _G.StatsHUD_Enabled = Value
      
      local CoreGui = game:GetService("CoreGui")
      local RunService = game:GetService("RunService")
      local Players = game:GetService("Players")
      local LocalPlayer = Players.LocalPlayer
      
      -- Si lo apagamos, borramos la barra
      if not Value then
          if CoreGui:FindFirstChild("ZSLX_StatsHUD") then
              CoreGui.ZSLX_StatsHUD:Destroy()
          end
          return
      end

      -- CREACIÓN DE LA BARRA FLOTANTE
      local Screen = Instance.new("ScreenGui")
      Screen.Name = "ZSLX_StatsHUD"
      Screen.ResetOnSpawn = false
      Screen.Parent = CoreGui

      local Frame = Instance.new("Frame")
      Frame.Size = UDim2.new(0, 300, 0, 35)
      Frame.Position = UDim2.new(0.5, -150, 0.5, -17) -- En el mero centro
      Frame.BackgroundColor3 = Color3.fromRGB(15, 15, 15) -- Negro elegante
      Frame.BorderSizePixel = 0
      Frame.Active = true
      Frame.Parent = Screen

      local Corner = Instance.new("UICorner")
      Corner.CornerRadius = UDim.new(0, 8)
      Corner.Parent = Frame

      local Stroke = Instance.new("UIStroke")
      Stroke.Color = Color3.fromRGB(0, 255, 255) -- Borde Cyan Z-SLX
      Stroke.Thickness = 1.5
      Stroke.Parent = Frame

      local TextLabel = Instance.new("TextLabel")
      TextLabel.Size = UDim2.new(1, 0, 1, 0)
      TextLabel.BackgroundTransparency = 1
      TextLabel.Font = Enum.Font.GothamBold
      TextLabel.TextSize = 14
      TextLabel.TextColor3 = Color3.new(1, 1, 1)
      TextLabel.Text = "Cargando Stats..."
      TextLabel.Parent = Frame

      -- [[ SISTEMA PARA ARRASTRAR (DRAGGABLE) CELULAR Y PC ]]
      local UserInputService = game:GetService("UserInputService")
      local dragging, dragInput, dragStart, startPos

      Frame.InputBegan:Connect(function(input)
          if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
              dragging = true
              dragStart = input.Position
              startPos = Frame.Position
              
              input.Changed:Connect(function()
                  if input.UserInputState == Enum.UserInputState.End then dragging = false end
              end)
          end
      end)

      Frame.InputChanged:Connect(function(input)
          if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
              dragInput = input
          end
      end)

      UserInputService.InputChanged:Connect(function(input)
          if input == dragInput and dragging then
              local delta = input.Position - dragStart
              Frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
          end
      end)

      -- [[ BUCLE DE ACTUALIZACIÓN (TIEMPO REAL) ]]
      local lastUpdate = 0
      RunService.RenderStepped:Connect(function(deltaTime)
          if not _G.StatsHUD_Enabled then return end
          
          -- Actualizamos cada 0.2 segundos para que los números no parpadeen a lo loco
          if tick() - lastUpdate > 0.2 then
              lastUpdate = tick()
              
              -- Calcular FPS
              local fps = math.floor(1 / deltaTime)
              
              -- Calcular Ping (ms)
              local ping = 0
              pcall(function() ping = math.floor(LocalPlayer:GetNetworkPing() * 1000) end)
              
              -- Calcular Memoria (simulando "CPU")
              local mem = math.floor(game:GetService("Stats"):GetTotalMemoryUsageMb())
              
              -- Formato de la perra barra
              TextLabel.Text = string.format(" | FPS: %d | PING: %d ms | MEM: %d MB | ", fps, ping, mem)
              
              -- Cambiar de color el FPS si baja mucho (Opcional, se ve pro)
              if fps < 30 then
                  TextLabel.TextColor3 = Color3.fromRGB(255, 50, 50) -- Rojo si hay lag
              elseif fps < 60 then
                  TextLabel.TextColor3 = Color3.fromRGB(255, 255, 0) -- Amarillo
              else
                  TextLabel.TextColor3 = Color3.fromRGB(255, 255, 255) -- Blanco si va joya
              end
          end
      end)
   end,
})


















--fov for pc movil







-- [[ 1. CREADOR DEL FOV PARA MÓVIL (GUI NATIVO) ]]
local CoreGui = game:GetService("CoreGui")
local ZSLX_FOV = CoreGui:FindFirstChild("ZSLX_MobileFOV")
if not ZSLX_FOV then
    ZSLX_FOV = Instance.new("ScreenGui")
    ZSLX_FOV.Name = "ZSLX_MobileFOV"
    ZSLX_FOV.IgnoreGuiInset = true -- OBLIGATORIO para centrar en celular
    ZSLX_FOV.Parent = CoreGui
end

local FOVCircle = ZSLX_FOV:FindFirstChild("FOVCircleFrame")
local FOVStroke = nil

if not FOVCircle then
    FOVCircle = Instance.new("Frame")
    FOVCircle.Name = "FOVCircleFrame"
    FOVCircle.AnchorPoint = Vector2.new(0.5, 0.5)
    FOVCircle.BackgroundTransparency = 1
    FOVCircle.Parent = ZSLX_FOV

    local UICorner = Instance.new("UICorner")
    UICorner.CornerRadius = UDim.new(1, 0)
    UICorner.Parent = FOVCircle

    FOVStroke = Instance.new("UIStroke")
    FOVStroke.Thickness = 2
    FOVStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
    FOVStroke.Parent = FOVCircle
else
    FOVStroke = FOVCircle:FindFirstChildOfClass("UIStroke")
end

-- [[ 2. LÓGICA MEJORADA CON SELECTOR ]]
local function GetClosestPlayer()
    local Target = nil
    local Distance = _G.FOVSize * 4 

    for _, v in pairs(game:GetService("Players"):GetPlayers()) do
        if v ~= game.Players.LocalPlayer and v.Character and v.Character:FindFirstChild(_G.AimPart) and v.Character:FindFirstChild("Humanoid") then
            
            -- Anti-Bot Automático (Sigue activo por defecto)
            if v.Character.Humanoid.Health <= 0 or v.Character:FindFirstChild("IsAnNPC") then continue end
            if _G.TeamCheck and v.Team == game.Players.LocalPlayer.Team then continue end
            
            local Pos, OnScreen = workspace.CurrentCamera:WorldToViewportPoint(v.Character[_G.AimPart].Position)
            local Center = workspace.CurrentCamera.ViewportSize / 2
            local Mag = (Vector2.new(Pos.X, Pos.Y) - Center).Magnitude

            if Mag < Distance and OnScreen then
                if _G.WallCheck then
                    local Parts = workspace.CurrentCamera:GetPartsObscuringTarget({v.Character[_G.AimPart].Position}, {game.Players.LocalPlayer.Character, v.Character})
                    if #Parts > 0 then continue end
                end
                Target = v
                Distance = Mag
            end
        end
    end
    return Target
end

-- [[ 3. RENDER LOOP (MÓVIL FIX) ]]
game:GetService("RunService").RenderStepped:Connect(function()
    if FOVCircle then
        FOVCircle.Visible = _G.ShowFOV
        
        -- FIX MÓVIL: Diámetro (Size) en vez de Radio
        local diametro = (_G.FOVSize * 2) * 2
        FOVCircle.Size = UDim2.new(0, diametro, 0, diametro)
        
        -- FIX MÓVIL: Centrado usando UDim2
        local viewport = workspace.CurrentCamera.ViewportSize
        FOVCircle.Position = UDim2.new(0, viewport.X / 2, 0, viewport.Y / 2)

        if _G.FOVRainbow then
            -- FIX MÓVIL: El color va al Stroke
            FOVStroke.Color = Color3.fromHSV(tick() % 5 / 5, 1, 1)
        else
            FOVStroke.Color = Color3.fromRGB(255, 255, 255)
        end
    end

    if _G.AimbotEnabled then
        local Target = GetClosestPlayer()
        if Target then
            local LookPos = workspace.CurrentCamera.CFrame:Lerp(CFrame.new(workspace.CurrentCamera.CFrame.Position, Target.Character[_G.AimPart].Position), 1/_G.AimbotStrength)
            workspace.CurrentCamera.CFrame = LookPos
        end
    end
end)





























-- Hit box 














-- [[ MOTOR Z-SLX HITBOX LITE FINAL: TEAMCHECK V4 + FPS BOOST ]]
_G.ForceReset = false
_G.TeamCheck_V4 = true -- Activado por defecto para seguridad

game:GetService("RunService").Heartbeat:Connect(function()
    -- Optimización: Si no hay nada que hacer, el script se duerme
    if not _G.HitboxEnabled_V1 and not _G.ForceReset then return end
    
    local lp = game.Players.LocalPlayer
    local targetSize = Vector3.new(_G.HitboxSize_V1, _G.HitboxSize_V1, _G.HitboxSize_V1)

    for _, p in pairs(game.Players:GetPlayers()) do
        if p ~= lp and p.Character then
            local char = p.Character
            
            -- [[ BLOQUE DE LIMPIEZA / RESETEO ]]
            if not _G.HitboxEnabled_V1 or _G.ForceReset then
                for _, part in pairs(char:GetChildren()) do
                    local orig = part:FindFirstChild("OriginalSize")
                    if orig and part.Size ~= orig.Value then
                        part.Size = orig.Value
                        part.Transparency = 0
                        part.Material = Enum.Material.Plastic
                        part.CanCollide = true
                    end
                end
                continue
            end

            -- [[ TEAMCHECK V4: BYPASS DE ALIADOS ]]
            -- Si el TeamCheck está ON y el wey es de tu equipo, lo reseteamos a normal
            if _G.TeamCheck_V4 and lp.Team and p.Team == lp.Team then
                for _, part in pairs(char:GetChildren()) do
                    local orig = part:FindFirstChild("OriginalSize")
                    if orig and part.Size ~= orig.Value then
                        part.Size = orig.Value
                        part.Transparency = 0
                    end
                end
                continue 
            end

            -- [[ SELECCIÓN MODULAR LITE ]]
            local targetParts = {}
            if _G.HitboxTarget == "Head" then
                table.insert(targetParts, char:FindFirstChild("Head"))
            elseif _G.HitboxTarget == "Torso" then
                table.insert(targetParts, char:FindFirstChild("Torso") or char:FindFirstChild("UpperTorso"))
            elseif _G.HitboxTarget == "Huesos (All)" then
                local limbNames = {"Left Arm", "Right Arm", "Left Leg", "Right Leg", "LeftUpperArm", "RightUpperArm", "LeftUpperLeg", "RightUpperLeg"}
                for _, name in pairs(limbNames) do
                    table.insert(targetParts, char:FindFirstChild(name))
                end
            end

            -- [[ APLICACIÓN BÉLICA ]]
            for _, obj in pairs(targetParts) do
                if obj and obj.Size ~= targetSize then
                    -- Guardar original una sola vez para el reset
                    if not obj:FindFirstChild("OriginalSize") then
                        local s = Instance.new("Vector3Value", obj)
                        s.Name = "OriginalSize"
                        s.Value = obj.Size
                    end
                    
                    -- Aplicar Hitbox Rojo Intenso
                    obj.Size = targetSize
                    obj.Transparency = 0.6
                    obj.Color = Color3.fromRGB(255, 0, 0)
                    obj.Material = Enum.Material.Neon
                    obj.CanCollide = false
                    obj.Massless = true
                end
            end
        end
    end
    _G.ForceReset = false 
end)














-- [[ MOTOR OFICIAL Z-SLX V4.0 - HUNTER EDITION ]]
_G.TPKillV6_Enabled = false
_G.TeamCheck_V6 = false
_G.V6_Dist = 5

game:GetService("RunService").RenderStepped:Connect(function()
    local lp = game.Players.LocalPlayer
    local char = lp.Character
    local root = char and char:FindFirstChild("HumanoidRootPart")
    
    if not _G.TPKillV6_Enabled or not root then return end
    
    local targetPos = root.CFrame * CFrame.new(0, 0, -_G.V6_Dist)

    for _, p in pairs(game.Players:GetPlayers()) do
        -- FILTRO DE SELECCIÓN (Modo ALL o Modo Individual)
        if _G.TargetPlayer ~= "ALL" and p.Name ~= _G.TargetPlayer then continue end

        if p ~= lp and p.Character then
            local eChar = p.Character
            local hum = eChar:FindFirstChild("Humanoid")
            local head = eChar:FindFirstChild("Head")
            
            -- 1. TEAM CHECK (Solo si no es un objetivo individual)
            if _G.TargetPlayer == "ALL" and _G.TeamCheck_V6 and (p.Team == lp.Team or p.TeamColor == lp.TeamColor) then 
                continue 
            end

            -- 2. FILTRO ANTI-INMORTALES
            local isProtected = eChar:FindFirstChildOfClass("ForceField") 
                                or eChar:FindFirstChild("ForceField") 
                                or (hum and hum.Parent:FindFirstChild("ForceField"))

            if isProtected then continue end

            -- 3. EXTRACCIÓN DE CABEZA
            if head and hum and hum.Health > 0 then
                pcall(function()
                    -- LIMPIEZA VISUAL
                    for _, part in pairs(eChar:GetChildren()) do
                        if part:IsA("BasePart") and part.Name ~= "Head" then
                            part.Transparency = 1 
                            part.CanCollide = false
                        elseif part:IsA("Accessory") then
                            part:Destroy()
                        end
                    end

                    -- DESCONECTAR CUELLO
                    local torso = eChar:FindFirstChild("Torso") or eChar:FindFirstChild("UpperTorso")
                    local neck = head:FindFirstChild("Neck") or (torso and torso:FindFirstChild("Neck"))
                    if neck then neck.Enabled = false end

                    -- TP CABEZA (Sin arrastrar carros/asientos)
                    head.CanCollide = false
                    head.Massless = true
                    head.Velocity = Vector3.new(0,0,0)
                    head.CFrame = targetPos
                    
                    -- ESTILO BÉLICO NEON
                    head.Color = Color3.fromRGB(255, 255, 255)
                    head.Material = Enum.Material.Neon
                end)
            end
        end
    end
end)




















-- [[ MOTOR DE DESINCRONIZACIÓN TOTAL (HARD-FREEZE V3.1 - RED BLOCK FIX) ]]
local FrozenPositions = {} 
local OriginBlock = nil -- Aquí guardamos el bloque rojo

task.spawn(function()
    while true do
        if _G.FakeLag_Enabled then
            -- CAPA 1: Lag extremo de entrada
            pcall(function() settings().Network.IncomingReplicationLag = 999999 end)
            
            -- CREAR BLOQUE ROJO EN EL ORIGEN (Solo una vez al activar)
            local lp = game.Players.LocalPlayer
            if lp.Character and lp.Character:FindFirstChild("HumanoidRootPart") and not OriginBlock then
                OriginBlock = Instance.new("Part")
                OriginBlock.Name = "ZSLX_LagOrigin"
                OriginBlock.Size = Vector3.new(4, 5, 1) -- Tamaño tipo humano
                OriginBlock.CFrame = lp.Character.HumanoidRootPart.CFrame
                OriginBlock.Anchored = true
                OriginBlock.CanCollide = false
                OriginBlock.Color = Color3.fromRGB(255, 0, 0) -- ROJO BÉLICO
                OriginBlock.Material = Enum.Material.Neon
                OriginBlock.Transparency = 0.4 -- Un poco transparente para que se vea pro
                OriginBlock.Parent = workspace
                
                -- Efecto visual: un cilindro o algo para que resalte (opcional)
                local box = Instance.new("SelectionBox")
                box.Adornee = OriginBlock
                box.Color3 = Color3.fromRGB(255, 0, 0)
                box.Parent = OriginBlock
            end

            -- CAPA 2: SECUESTRO DE POSICIONES
            for _, p in pairs(game:GetService("Players"):GetPlayers()) do
                if p ~= lp then 
                    if p.Character and p.Character:FindFirstChild("HumanoidRootPart") then
                        local hrp = p.Character.HumanoidRootPart
                        
                        if not FrozenPositions[p.Name] then
                            FrozenPositions[p.Name] = hrp.CFrame
                        end
                        
                        hrp.CFrame = FrozenPositions[p.Name]
                        hrp.Velocity = Vector3.new(0, 0, 0)
                        hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0)
                    end
                end
            end
        else
            -- RESET TOTAL CUANDO EL TIMER SE APAGA
            if next(FrozenPositions) ~= nil or OriginBlock then
                pcall(function() settings().Network.IncomingReplicationLag = 0 end)
                FrozenPositions = {}
                
                -- BORRAR BLOQUE ROJO
                if OriginBlock then
                    OriginBlock:Destroy()
                    OriginBlock = nil
                end
            end
        end
        game:GetService("RunService").Heartbeat:Wait() 
    end
end)




























-- [[ MOTOR ANTI-HIT V2 - Z-SLX BÉLICO ]]
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local lp = Players.LocalPlayer

-- Crear el Anillo (Sin relleno usando un Adornment)
local Ring = Instance.new("CylinderHandleAdornment")
Ring.Name = "ZSLX_AntiHit_Ring"
Ring.Color3 = Color3.fromRGB(255, 0, 0)
Ring.Transparency = 0.2
Ring.Adornee = workspace.Terrain -- Referencia global
Ring.AlwaysOnTop = false -- Para que se vea en el piso
Ring.ZIndex = 5
Ring.Height = 0.5 -- Grosor del anillo
Ring.Parent = workspace.Terrain

-- Función para TP de Escape (25 Bloques de distancia)
local function SafeTP()
    if lp.Character and lp.Character:FindFirstChild("HumanoidRootPart") then
        local hrp = lp.Character.HumanoidRootPart
        -- Dirección aleatoria pero potente
        local randomDir = Vector3.new(math.random(-10, 10), 0, math.random(-10, 10)).Unit
        if randomDir.Magnitude == 0 then randomDir = Vector3.new(1,0,1) end
        
        hrp.CFrame = hrp.CFrame + (randomDir * 30) -- SALTO DE 25 BLOQUES
    end
end

task.spawn(function()
    while true do
        if _G.AntiHit_Enabled and lp.Character and lp.Character:FindFirstChild("HumanoidRootPart") then
            local myHrp = lp.Character.HumanoidRootPart
            local radius = _G.AntiHit_Radius
            
            -- Actualizar Anillo Visual (HUECO)
            Ring.Visible = true
            Ring.InnerRadius = radius - 0.5 -- ¡AQUÍ ESTÁ EL TRUCO DEL HUECO!
            Ring.Radius = radius
            Ring.CFrame = CFrame.new(myHrp.Position - Vector3.new(0, 2.5, 0)) * CFrame.Angles(math.rad(90), 0, 0)
            
            -- Detectar Enemigos con Team Check
            for _, p in pairs(Players:GetPlayers()) do
                if p ~= lp and p.Character and p.Character:FindFirstChild("HumanoidRootPart") then
                    
                    -- 1. REVISIÓN DE EQUIPO (Team Check)
                    if p.Team == lp.Team or p.TeamColor == lp.TeamColor then 
                        continue -- Si es amigo, no hace nada
                    end
                    
                    local enemyHrp = p.Character.HumanoidRootPart
                    local distance = (myHrp.Position - enemyHrp.Position).Magnitude
                    
                    -- 2. DISPARADOR DE TP
                    if distance <= radius then
                        SafeTP()
                        Rayfield:Notify({
                            Title = "Z-SLX DEFENSE", 
                            Content = "Enemigo cerca! Salto de 25 bloques activado.", 
                            Duration = 1.5
                        })
                        task.wait(0.3) -- Cooldown para que no parezca lag infinito
                    end
                end
            end
        else
            Ring.Visible = false -- Apagar si no está activo
        end
        RunService.Heartbeat:Wait()
    end
end)






























-- [[ MOTOR DE DESINCRONIZACIÓN Z-SLX V6 ]]
_G.ModoGhostFE = false

game:GetService("RunService").Heartbeat:Connect(function()
    local lp = game.Players.LocalPlayer
    local char = lp.Character
    local root = char and char:FindFirstChild("HumanoidRootPart")
    local hum = char and char:FindFirstChild("Humanoid")

    if _G.ModoGhostFE and root and hum and hum.Health > 0 then
        local oldPos = root.CFrame
        -- Te manda al vacío para que nadie te pegue
        root.CFrame = oldPos * CFrame.new(0, -50000, 0)
        
        -- Fix de Cámara: Mantiene tu vista donde está la acción
        hum.CameraOffset = Vector3.new(0, 50000, 0)
        
        -- Regreso instantáneo: El secreto para que el arma dispare
        game:GetService("RunService").RenderStepped:Wait()
        root.CFrame = oldPos
    elseif hum then
        -- Limpiamos la cámara si se apaga el Ghost
        hum.CameraOffset = Vector3.new(0, 0, 0)
    end
end)























--- Visual 


























-- [[ MOTOR Z-SLX: NIGHT VISION SIERRA (OPTIMIZADO) ]]
local Lighting = game:GetService("Lighting")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Atmosphere = Lighting:FindFirstChildOfClass("Atmosphere")

-- Creamos el efecto si no existe
local NVG_Effect = Lighting:FindFirstChild("ColornvgSierraMX") or Instance.new("ColorCorrectionEffect", Lighting)
NVG_Effect.Name = "ColornvgSierraMX"

-- Escuchamos el cambio del Toggle
task.spawn(function()
    while task.wait(0.2) do -- Un check rápido pero ligero
        if _G.NightVision_Enabled then
            -- 1. BYPASS DE NIEBLA (Mandamos la atmósfera al sótano)
            if Atmosphere and Atmosphere.Parent == Lighting then
                Atmosphere.Parent = ReplicatedStorage
            end
            
            -- 2. CONFIGURACIÓN BÉLICA
            Lighting.ExposureCompensation = 3 
            NVG_Effect.Enabled = true
            NVG_Effect.Brightness = 0.1
            NVG_Effect.Contrast = 0.8
            NVG_Effect.Saturation = -1 
            NVG_Effect.TintColor = Color3.fromRGB(50, 255, 50) -- Verde Intenso
        else
            -- 3. RESTAURAR TODO (A la normalidad)
            if Atmosphere and Atmosphere.Parent == ReplicatedStorage then
                Atmosphere.Parent = Lighting
            end
            
            Lighting.ExposureCompensation = 0
            NVG_Effect.Enabled = false
            NVG_Effect.TintColor = Color3.fromRGB(255, 255, 255)
            NVG_Effect.Saturation = 0
            NVG_Effect.Contrast = 0
        end
    end
end)



























-- [[ MOTOR Z-SLX: FOV CHANGER (FORZADO) ]]
game:GetService("RunService").RenderStepped:Connect(function()
    local cam = workspace.CurrentCamera
    if cam and cam.FieldOfView ~= _G.CustomFOV then
        -- Aplicamos el FOV de tu Slider
        cam.FieldOfView = _G.CustomFOV
    end
end)


































--// ========================================== //--
--//    MOTOR TRACERS Z-SLX (SIERRA STABLE)     //--
--// ========================================== //--
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera

-- Variables de Configuración (Por si no usas el menú)
if _G.Tracers_Enabled == nil then _G.Tracers_Enabled = true end
if _G.Tracer_Origin == nil then _G.Tracer_Origin = "Abajo" end

local function ObtenerCarpetaMaestra()
    local gui = LocalPlayer.PlayerGui:FindFirstChild("Master_Tracers")
    if not gui then
        gui = Instance.new("ScreenGui")
        gui.Name = "Master_Tracers"
        gui.IgnoreGuiInset = true
        gui.ResetOnSpawn = false 
        gui.DisplayOrder = 999
        gui.Parent = LocalPlayer.PlayerGui
    end
    return gui
end

local function ObtenerTracer(player)
    local folder = ObtenerCarpetaMaestra()
    local name = "Line_" .. player.Name
    local line = folder:FindFirstChild(name)
    if not line then
        line = Instance.new("Frame")
        line.Name = name
        line.BorderSizePixel = 0
        -- [[ EL SECRETO ANTI-TEMBLOR ]]
        -- El punto de anclaje en el medio (0.5, 0.5) hace que la rotación sea perfecta
        line.AnchorPoint = Vector2.new(0.5, 0.5) 
        line.Visible = false
        line.Parent = folder
    end
    return line
end

RunService.RenderStepped:Connect(function()
    -- 1. Si está apagado, ocultar todo y salir
    if not _G.Tracers_Enabled then
        local gui = LocalPlayer.PlayerGui:FindFirstChild("Master_Tracers")
        if gui then
            for _, child in pairs(gui:GetChildren()) do child.Visible = false end
        end
        return
    end

    local cam = workspace.CurrentCamera
    if not cam then return end

    -- 2. CALCULAR EL PUNTO DE INICIO (TU LISTA)
    local StartPos = Vector2.new(cam.ViewportSize.X / 2, cam.ViewportSize.Y) -- Default: Abajo

    if _G.Tracer_Origin == "Centro" then
        StartPos = Vector2.new(cam.ViewportSize.X / 2, cam.ViewportSize.Y / 2)
    elseif _G.Tracer_Origin == "Arriba" then
        StartPos = Vector2.new(cam.ViewportSize.X / 2, 0)
    end

    for _, player in pairs(Players:GetPlayers()) do
        if player ~= LocalPlayer then
            local line = ObtenerTracer(player)
            local char = player.Character
            local hrp = char and char:FindFirstChild("HumanoidRootPart")
            local hum = char and char:FindFirstChild("Humanoid")

            if hrp and hum and hum.Health > 0 then
                
                -- 3. CALCULAR DESTINO (ENEMIGO)
                local ScreenPoint, OnScreen = cam:WorldToViewportPoint(hrp.Position)
                local EndPos = Vector2.new(ScreenPoint.X, ScreenPoint.Y)

                -- LÓGICA 360 (INVERTIR SI ESTÁ ATRÁS)
                if ScreenPoint.Z < 0 then
                   local InvPos = (EndPos - Vector2.new(cam.ViewportSize.X/2, cam.ViewportSize.Y/2)).Unit * 1000
                   EndPos = Vector2.new(cam.ViewportSize.X/2, cam.ViewportSize.Y/2) - InvPos
                end

                -- 4. MATEMÁTICAS DE DIBUJO (ANTI-SHAKE)
                -- Calculamos el centro entre el Inicio y el Fin
                local Center = (StartPos + EndPos) / 2
                -- Calculamos la distancia (Largo de la línea)
                local Distance = (StartPos - EndPos).Magnitude
                -- Calculamos el ángulo de rotación
                local Angle = math.atan2(EndPos.Y - StartPos.Y, EndPos.X - StartPos.X)

                -- APLICAR PROPIEDADES
                line.Visible = true
                line.Size = UDim2.new(0, Distance, 0, 1.5) -- Grosor fijo
                line.Position = UDim2.new(0, Center.X, 0, Center.Y) -- Posición absoluta
                line.Rotation = math.deg(Angle)

                -- 5. TEAM COLOR AUTOMÁTICO
                if player.TeamColor then
                    line.BackgroundColor3 = player.TeamColor.Color
                else
                    line.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
                end
            else
                if line then line.Visible = false end
            end
        end
    end
end)

-- Limpieza si se salen
Players.PlayerRemoving:Connect(function(player)
    local folder = LocalPlayer.PlayerGui:FindFirstChild("Master_Tracers")
    if folder then
        local line = folder:FindFirstChild("Line_" .. player.Name)
        if line then line:Destroy() end
    end
end)
































-- [[ MOTOR Z-SLX: SHADOW HIGHLIGHT (NATIVE) ]]
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local LocalPlayer = Players.LocalPlayer

-- Nombre clave para identificar nuestros efectos y borrarlos
local HIGHLIGHT_NAME = "Z_Shadow_Effect"

-- Función de Limpieza Masiva (Nuclear)
local function ClearShadows()
    for _, p in pairs(Players:GetPlayers()) do
        if p.Character then
            local hl = p.Character:FindFirstChild(HIGHLIGHT_NAME)
            if hl then hl:Destroy() end
        end
    end
end

RunService.RenderStepped:Connect(function()
    -- 1. Si está apagado, aseguramos que el mapa esté limpio
    if not _G.Shadow_Enabled then
        -- Hacemos un check rápido: Si encuentro uno, lanzo limpieza masiva
        -- Esto evita correr el loop de borrado 60 veces por segundo innecesariamente
        for _, p in pairs(Players:GetPlayers()) do
            if p.Character and p.Character:FindFirstChild(HIGHLIGHT_NAME) then
                ClearShadows()
                break
            end
        end
        return
    end

    -- 2. Loop de Aplicación
    for _, p in pairs(Players:GetPlayers()) do
        if p ~= LocalPlayer and p.Character then
            local Char = p.Character
            
            -- Solo aplicamos si está vivo (HumanoidCheck)
            local Hum = Char:FindFirstChild("Humanoid")
            if Hum and Hum.Health > 0 then
                
                -- Buscamos el Highlight existente o creamos uno nuevo
                local HL = Char:FindFirstChild(HIGHLIGHT_NAME)
                
                if not HL then
                    HL = Instance.new("Highlight")
                    HL.Name = HIGHLIGHT_NAME
                    HL.Adornee = Char
                    HL.Parent = Char
                    HL.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop -- Ver a través de paredes
                end

                -- 3. Actualización de Propiedades en Vivo (Live Update)
                -- Color del Equipo
                local TeamColor = Color3.fromRGB(255, 255, 255) -- Blanco por defecto
                if p.TeamColor then
                    TeamColor = p.TeamColor.Color
                end

                HL.FillColor = TeamColor
                HL.OutlineColor = Color3.fromRGB(255, 255, 255) -- Borde blanco para resaltar
                
                -- Transparencias (Controladas por Sliders)
                HL.FillTransparency = _G.Shadow_Fill or 0.5
                HL.OutlineTransparency = _G.Shadow_Outline or 0
                
            else
                -- Si está muerto, le quitamos el Highlight para no ver fantasmas en el piso
                local hl = Char:FindFirstChild(HIGHLIGHT_NAME)
                if hl then hl:Destroy() end
            end
        end
    end
end)

-- Limpieza al salir del juego
Players.PlayerRemoving:Connect(function(p)
    if p.Character then
        local hl = p.Character:FindFirstChild(HIGHLIGHT_NAME)
        if hl then hl:Destroy() end
    end
end)




































-- [[ Z-SLX: ESP SIMPLE MÓVIL (GUI NATIVO + TEAM COLOR) ]]
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local Camera = workspace.CurrentCamera
local LocalPlayer = Players.LocalPlayer

-- 1. CARPETA MAESTRA PARA CELULAR (Ignora el "Notch" de la pantalla)
local function GetESPFolder()
    local folder = LocalPlayer.PlayerGui:FindFirstChild("ZSLX_MobileESP")
    if not folder then
        folder = Instance.new("ScreenGui")
        folder.Name = "ZSLX_MobileESP"
        folder.IgnoreGuiInset = true -- OBLIGATORIO para que las cajas no salgan movidas en cel
        folder.ResetOnSpawn = false
        folder.Parent = LocalPlayer.PlayerGui
    end
    return folder
end

-- Almacén de Cajas GUI
local ESPGuis = {}

local function RemoveESP(plr)
    if ESPGuis[plr] then
        if ESPGuis[plr].Box then
            ESPGuis[plr].Box:Destroy()
        end
        ESPGuis[plr] = nil
    end
end

RunService.RenderStepped:Connect(function()
    -- Si está apagado, escondemos todo
    if not _G.ESP_Enabled then
        for _, set in pairs(ESPGuis) do
            if set.Box then set.Box.Visible = false end
        end
        return
    end

    local Folder = GetESPFolder()

    for _, plr in pairs(Players:GetPlayers()) do
        if plr ~= LocalPlayer then
            -- CREAR CAJA (FRAME) SI NO EXISTE
            if not ESPGuis[plr] then
                local Box = Instance.new("Frame")
                Box.Name = "ESP_" .. plr.Name
                Box.BackgroundTransparency = 1 -- Hueco por dentro para ver al enemigo
                Box.BorderSizePixel = 0
                Box.Visible = false
                Box.Parent = Folder

                -- Usamos UIStroke para hacer el borde de la caja (Compatible con cel)
                local Stroke = Instance.new("UIStroke")
                Stroke.Thickness = 1.5
                Stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
                Stroke.Parent = Box

                ESPGuis[plr] = {
                    Box = Box,
                    Stroke = Stroke
                }
            end

            local D = ESPGuis[plr]
            local Char = plr.Character
            
            -- CHECK DE VIDA O MUERTE
            if Char and Char:FindFirstChild("HumanoidRootPart") and Char:FindFirstChild("Humanoid") and Char.Humanoid.Health > 0 then
                local Hum = Char.Humanoid
                local HRP = Char.HumanoidRootPart
                local Pos, OnScreen = Camera:WorldToViewportPoint(HRP.Position)

                if OnScreen then
                    -- CÁLCULOS DE TAMAÑO ORIGINALES (La matemática de 3D a 2D)
                    local Size = (Hum.RigType == Enum.HumanoidRigType.R6 and 3 or 3.5)
                    local Top = Camera:WorldToViewportPoint(HRP.Position + Vector3.new(0, Size, 0))
                    local Bottom = Camera:WorldToViewportPoint(HRP.Position - Vector3.new(0, Size + 1.5, 0))
                    local Height = math.abs(Top.Y - Bottom.Y)
                    local Width = Height / 1.6
                    local BoxPos = Vector2.new(Pos.X - Width / 2, Pos.Y - Height / 2)

                    -- 1. DIBUJAR CAJA (Adaptado a UDim2 para celular)
                    D.Box.Size = UDim2.new(0, Width, 0, Height)
                    D.Box.Position = UDim2.new(0, BoxPos.X, 0, BoxPos.Y)
                    D.Box.Visible = true
                    
                    -- [[ TEAM COLOR FIX ]]
                    if plr.TeamColor then
                        D.Stroke.Color = plr.TeamColor.Color
                    else
                        D.Stroke.Color = Color3.new(1, 1, 1) -- Blanco por defecto
                    end

                else
                    -- No en pantalla
                    D.Box.Visible = false
                end
            else
                -- Muerto o sin personaje
                D.Box.Visible = false
            end
        else
            -- Si el jugador se fue, limpiar
            if ESPGuis[plr] then RemoveESP(plr) end
        end
    end
end)

Players.PlayerRemoving:Connect(RemoveESP)














































-- [[ Z-SLX: INVENTORY GUI V2 (ADORNEE FIX + MULTI-TARGET) ]]
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer

-- 1. CARPETA BLINDADA (Aquí guardamos los GUIs para que nunca se borren)
local function GetMasterFolder()
    local folder = LocalPlayer.PlayerGui:FindFirstChild("ZSLX_InvFolder")
    if not folder then
        folder = Instance.new("ScreenGui")
        folder.Name = "ZSLX_InvFolder"
        folder.ResetOnSpawn = false -- ¡CLAVE! No se borra cuando tú mueres
        folder.Parent = LocalPlayer.PlayerGui
    end
    return folder
end

local InvGuis = {}

local function RemoveGUI(plr)
    if InvGuis[plr] then
        if InvGuis[plr].Bill then InvGuis[plr].Bill:Destroy() end
        InvGuis[plr] = nil
    end
end

-- 2. CREADOR DE CUADRITOS (MEJORADO)
local function CreateSlot(tool, parent, isEquipped, teamColor)
    local Slot = Instance.new("Frame")
    Slot.Size = UDim2.new(0, 35, 0, 35) -- Un poco más compactos para que quepan bien
    Slot.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
    Slot.BorderSizePixel = 0
    Slot.Parent = parent

    local Corner = Instance.new("UICorner")
    Corner.CornerRadius = UDim.new(0, 6)
    Corner.Parent = Slot

    local Stroke = Instance.new("UIStroke")
    Stroke.Parent = Slot
    
    if isEquipped then
        Stroke.Color = teamColor
        Stroke.Thickness = 2.5
    else
        Stroke.Color = Color3.fromRGB(100, 100, 100)
        Stroke.Thickness = 1
    end

    if tool.TextureId ~= "" then
        local Icon = Instance.new("ImageLabel")
        Icon.Size = UDim2.new(0.9, 0, 0.9, 0)
        Icon.Position = UDim2.new(0.05, 0, 0.05, 0)
        Icon.BackgroundTransparency = 1
        Icon.Image = tool.TextureId
        Icon.Parent = Slot
    else
        local Name = Instance.new("TextLabel")
        Name.Size = UDim2.new(1, 0, 1, 0)
        Name.BackgroundTransparency = 1
        -- Cortamos a 5 letras para que no se salga del cuadro
        Name.Text = string.sub(tool.Name, 1, 5) 
        Name.TextColor3 = Color3.new(1, 1, 1)
        Name.TextScaled = true
        Name.Font = Enum.Font.GothamBold
        Name.Parent = Slot
    end
    
    return Slot
end

-- 3. EL MOTOR ESCÁNER
RunService.RenderStepped:Connect(function()
    -- Si lo apagas, oculta todo rápido
    if not _G.VisualInv_Enabled then
        for _, data in pairs(InvGuis) do
            if data.Bill then data.Bill.Enabled = false end
        end
        return
    end

    for _, plr in pairs(Players:GetPlayers()) do
        if plr ~= LocalPlayer then
            local Char = plr.Character
            -- Checamos que esté 100% vivo y completo
            local isAlive = Char and Char:FindFirstChild("HumanoidRootPart") and Char:FindFirstChild("Head") and Char:FindFirstChild("Humanoid") and Char.Humanoid.Health > 0
            
            if isAlive then
                -- CREAR BILLBOARD SI NO EXISTE
                if not InvGuis[plr] then
                    local Bill = Instance.new("BillboardGui")
                    Bill.Name = "Inv_" .. plr.Name
                    Bill.AlwaysOnTop = true
                    Bill.Size = UDim2.new(6, 0, 1, 0)
                    Bill.StudsOffset = Vector3.new(0, 3.5, 0) -- Altura
                    Bill.MaxDistance = 200 -- Rango de visión
                    
                    -- [[ EL FIX SUPREMO ]]: Se guarda en TU pantalla, no en el enemigo
                    Bill.Parent = GetMasterFolder()
                    
                    local Container = Instance.new("Frame")
                    Container.Size = UDim2.new(1, 0, 1, 0)
                    Container.BackgroundTransparency = 1
                    Container.Parent = Bill
                    
                    local Layout = Instance.new("UIListLayout")
                    Layout.FillDirection = Enum.FillDirection.Horizontal
                    Layout.HorizontalAlignment = Enum.HorizontalAlignment.Center
                    Layout.VerticalAlignment = Enum.VerticalAlignment.Center
                    Layout.Padding = UDim.new(0, 4)
                    Layout.Parent = Container

                    InvGuis[plr] = {Bill = Bill, Container = Container, LastUpdate = 0}
                end

                local GUI = InvGuis[plr]
                
                -- [[ ADORNEE LÁSER ]]: Pegamos el GUI a su cabeza virtualmente
                GUI.Bill.Adornee = Char.Head
                GUI.Bill.Enabled = true

                -- ACTUALIZAR MOCHILA CADA 0.5 SEGUNDOS (Anti-Lag para varios enemigos)
                if tick() - GUI.LastUpdate > 0.5 then
                    GUI.LastUpdate = tick()
                    
                    -- Borrar cuadros viejos
                    for _, child in pairs(GUI.Container:GetChildren()) do
                        if child:IsA("Frame") then child:Destroy() end
                    end

                    local TColor = plr.TeamColor and plr.TeamColor.Color or Color3.new(1, 0, 0) -- Rojo por defecto si no hay equipo

                    -- 1. ARMA EN MANO
                    local Equipped = Char:FindFirstChildWhichIsA("Tool")
                    if Equipped then
                        CreateSlot(Equipped, GUI.Container, true, TColor)
                    end

                    -- 2. ARMAS GUARDADAS
                    local Backpack = plr:FindFirstChild("Backpack")
                    if Backpack then
                        local Count = 0
                        for _, Item in pairs(Backpack:GetChildren()) do
                            if Item:IsA("Tool") then
                                CreateSlot(Item, GUI.Container, false, TColor)
                                Count = Count + 1
                                if Count >= 4 then break end -- Máximo 4 para no tapar toda la pantalla
                            end
                        end
                    end
                end
            else
                -- SI MUERE, OCULTAMOS Y DESPEGAMOS EL LÁSER (Pero no borramos el GUI)
                if InvGuis[plr] then 
                    InvGuis[plr].Bill.Enabled = false 
                    InvGuis[plr].Bill.Adornee = nil
                end
            end
        end
    end
end)

-- Si el jugador se sale del server, ahí sí borramos su GUI para no gastar memoria
Players.PlayerRemoving:Connect(RemoveGUI)













































-- [[ Z-SLX: MOTOR FLY MÓVIL (CONECTADO AL HUB) ]]
task.spawn(function()
    local p = game.Players.LocalPlayer
    local runService = game:GetService("RunService")
    local staticY = 0
    local active = false
    
    -- Agarrar controles de forma segura
    local PlayerControl
    pcall(function()
        PlayerControl = require(p.PlayerScripts:WaitForChild("PlayerModule")):GetControls()
    end)

    runService.Stepped:Connect(function()
        local char = p.Character
        local hrp = char and char:FindFirstChild("HumanoidRootPart")
        local hum = char and char:FindFirstChildOfClass("Humanoid")

        -- USAMOS TUS VARIABLES DEL HUB: _G.ZSLX_Fly y _G.ZSLX_FlySpeed
        if _G.ZSLX_Fly and hrp and hum and hum.Health > 0 then
            if not active then
                staticY = hrp.Position.Y
                active = true
            end

            hum:ChangeState(Enum.HumanoidStateType.Physics)
            hum.PlatformStand = true
            
            -- Noclip conectado
            local canCollideState = not (_G.Noclip_Enabled or false)
            for _, part in pairs(char:GetChildren()) do
                if part:IsA("BasePart") then part.CanCollide = canCollideState end
            end
            
            local cam = workspace.CurrentCamera
            -- Multiplicamos por 5 para que la velocidad del Input/Slider sea potente
            local speed = (_G.ZSLX_FlySpeed or 50) 
            
            -- OBTENER MOVIMIENTO DEL JOYSTICK
            local moveVector = PlayerControl:GetMoveVector()
            
            if moveVector.Magnitude > 0 then
                local camCF = cam.CFrame
                local look = camCF.LookVector
                local right = camCF.RightVector
                
                -- Dirección corregida según cámara
                local direction = (look * -moveVector.Z) + (right * moveVector.X)
                
                hrp.AssemblyLinearVelocity = direction * speed
                staticY = hrp.Position.Y 
            else
                -- FRENADO SECO
                hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0)
                hrp.CFrame = CFrame.new(hrp.Position.X, staticY, hrp.Position.Z) * hrp.CFrame.Rotation
            end
            
            -- POSE SIEMPRE DERECHO E INCLINADO
            hrp.CFrame = CFrame.new(hrp.Position, hrp.Position + cam.CFrame.LookVector)
            hrp.RotVelocity = Vector3.new(0, 0, 0)
        else
            if active then
                active = false
                if hum then
                    hum.PlatformStand = false
                    hum:ChangeState(Enum.HumanoidStateType.GettingUp)
                end
                if char then
                    for _, part in pairs(char:GetChildren()) do
                        if part:IsA("BasePart") then part.CanCollide = true end
                    end
                end
            end
        end
    end)
end)

Features & Information

Z hub leaked

Community Comments (1)

2voh2vohFeb 24, 2026

W goy script

More Scripts for Universal Scripts