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