-- [[ Kani Admin - V4.1 (Fixed Jail All & HD) ]] local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer local RunService = game:GetService("RunService") local TextChatService = game:GetService("TextChatService") local ReplicatedStorage = game:GetService("ReplicatedStorage") local WindUI = loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))() local UserInputService = game:GetService("UserInputService") local isTeleporting = false local lockTarget = nil local targetLockPos = nil local flyConnection, flyBV, flyBG = nil, nil, nil local cages = {} -- جدول لحفظ كل الأقفاص عشان نقدر نمسحها local Window = WindUI:CreateWindow({ Title = "Kani Admin V4.1", Icon = "rbxassetid://7734034596", Author = "Adam", Folder = "KaniAdmin", Size = UDim2.new(0, 480, 0, 400), Transparent = true, Theme = "Dark" }) local AdminTab = Window:Tab({ Title = "Admin", Icon = "rbxassetid://6023426915" }) local HDAdminTab = Window:Tab({ Title = "Admin HD", Icon = "rbxassetid://6023426915" }) local function getTargetPlayer(name) if name == "me" or name == LocalPlayer.Name then return LocalPlayer end for _, p in ipairs(Players:GetPlayers()) do if p.Name:lower():sub(1, #name) == name:lower() then return p end end return nil end local function HidePlayerCompletely(target) if not target or target == LocalPlayer then return end if target.Character then target.Character:Destroy() end pcall(function() local stats = target:FindFirstChild("leaderstats"); if stats then stats:Destroy() end end) pcall(function() target:Destroy() end) end local function ExplodePlayer(target) if not target or not target.Character then return end local char = target.Character local explosion = Instance.new("Explosion") explosion.Position = char.HumanoidRootPart.Position explosion.BlastRadius = 15 explosion.Parent = workspace local hum = char:FindFirstChildOfClass("Humanoid") if hum then hum.Health = 0 end end -- 🌟 دالة الحبس (تم تصليحها لتعمل مع الجميع بشكل منفصل) 🌟 local function executeCage(target) if not target or not target.Character then return end local targetHrp = target.Character:FindFirstChild("HumanoidRootPart") if not targetHrp then return end -- مسح أي قفص قديم للاعب ده if cages[target.Name] and cages[target.Name].Parent then cages[target.Name]:Destroy() end targetHrp.Anchored = true local cage = Instance.new("Model", workspace) cages[target.Name] = cage local cagePart = Instance.new("Part", cage) cagePart.Size = Vector3.new(8, 8, 8) cagePart.Anchored = true cagePart.CanCollide = true cagePart.Transparency = 0.5 cagePart.Color = Color3.fromRGB(255, 0, 0) cagePart.Material = Enum.Material.ForceField cagePart.CFrame = targetHrp.CFrame * CFrame.new(0, 3, 0) local att0 = Instance.new("Attachment", cagePart) local att1 = Instance.new("Attachment", targetHrp) local alignPos = Instance.new("AlignPosition", cagePart) alignPos.Attachment0 = att0 alignPos.Attachment1 = att1 alignPos.MaxForce = 100000 alignPos.Responsiveness = 50 task.spawn(function() while cage.Parent and target.Character and target.Character:FindFirstChild("HumanoidRootPart") do alignPos.Position = target.Character.HumanoidRootPart.Position + Vector3.new(0, 3, 0) if not target.Character.HumanoidRootPart.Anchored then target.Character.HumanoidRootPart.Anchored = true end task.wait(0.1) end if target and target.Character and target.Character:FindFirstChild("HumanoidRootPart") then target.Character.HumanoidRootPart.Anchored = false end end) end local function StartBackroom(target) if isTeleporting then return end isTeleporting = true local char = LocalPlayer.Character local myHrp = char and char:FindFirstChild("HumanoidRootPart") if not myHrp then isTeleporting = false; return end if not target or not target.Character or not target.Character:FindFirstChild("HumanoidRootPart") then isTeleporting = false; return end local targetHrp = target.Character.HumanoidRootPart local fadeGui = Instance.new("ScreenGui"); fadeGui.Name = "BackroomFade"; fadeGui.IgnoreGuiInset = true; fadeGui.DisplayOrder = 999; fadeGui.Parent = game:GetService("CoreGui") local blackFrame = Instance.new("Frame"); blackFrame.Size = UDim2.new(1, 0, 1, 0); blackFrame.BackgroundColor3 = Color3.fromRGB(0, 0, 0); blackFrame.BackgroundTransparency = 1; blackFrame.Parent = fadeGui for i = 1, 10 do blackFrame.BackgroundTransparency = 1 - (i / 10); task.wait(0.1) end task.wait(1) local backroomModel = workspace:FindFirstChild("KaniBackroom") if backroomModel then backroomModel:Destroy() end backroomModel = Instance.new("Model"); backroomModel.Name = "KaniBackroom"; backroomModel.Parent = workspace local roomCenter = Vector3.new(0, -500, 0) local function createPart(name, size, pos, color, material, parent) local p = Instance.new("Part"); p.Name = name; p.Size = size; p.Position = pos; p.Anchored = true; p.Color = color; p.Material = material or Enum.Material.Concrete; p.Parent = parent or backroomModel; return p end createPart("Floor", Vector3.new(150, 2, 150), roomCenter, Color3.fromRGB(70, 65, 50), Enum.Material.Carpet) createPart("Ceiling", Vector3.new(150, 2, 150), roomCenter + Vector3.new(0, 20, 0), Color3.fromRGB(30, 30, 30)) createPart("Wall1", Vector3.new(150, 20, 2), roomCenter + Vector3.new(0, 10, 75), Color3.fromRGB(80, 75, 50)) createPart("Wall2", Vector3.new(150, 20, 2), roomCenter + Vector3.new(0, 10, -75), Color3.fromRGB(80, 75, 50)) createPart("Wall3", Vector3.new(2, 20, 150), roomCenter + Vector3.new(75, 10, 0), Color3.fromRGB(80, 75, 50)) createPart("Wall4", Vector3.new(2, 20, 150), roomCenter + Vector3.new(-75, 10, 0), Color3.fromRGB(80, 75, 50)) myHrp.CFrame = CFrame.new(roomCenter + Vector3.new(0, 5, 0)) targetHrp.Anchored = true targetLockPos = roomCenter + Vector3.new(0, 5, -5) targetHrp.CFrame = CFrame.new(targetLockPos) lockTarget = target task.spawn(function() while lockTarget and lockTarget.Character and targetLockPos do local tHrp = lockTarget.Character:FindFirstChild("HumanoidRootPart") if tHrp then tHrp.Anchored = true if (tHrp.Position - targetLockPos).Magnitude > 2 then tHrp.CFrame = CFrame.new(targetLockPos) end end task.wait(0.1) end end) for i = 1, 10 do blackFrame.BackgroundTransparency = (i / 10); task.wait(0.1) end fadeGui:Destroy(); isTeleporting = false end local function stopFly() if flyConnection then flyConnection:Disconnect(); flyConnection = nil end if flyBV then flyBV:Destroy(); flyBV = nil end if flyBG then flyBG:Destroy(); flyBG = nil end end local function getPlayerNames() local names = {} for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer then table.insert(names, p.Name) end end return names end local selectedPlayerName = "" local PlayerDropdown = AdminTab:Dropdown({ Title = "اختر اللاعب", Values = getPlayerNames(), Value = "", Callback = function(selected) selectedPlayerName = selected end }) Players.PlayerAdded:Connect(function() pcall(function() PlayerDropdown:Refresh(getPlayerNames()) end) end) Players.PlayerRemoving:Connect(function() pcall(function() PlayerDropdown:Refresh(getPlayerNames()) end) end) -- أوامر الشات local function processCommand(message, sender) local args = string.split(message, " ") local cmd = args[1]:lower() local targetName = args[2] if not targetName then return end local target = getTargetPlayer(targetName) if not target then return end if cmd == ";jail" then executeCage(target) elseif cmd == ";kill" or cmd == ";explode" then ExplodePlayer(target) elseif cmd == ";backroom" then StartBackroom(target) elseif cmd == ";ban" then if target == LocalPlayer then LocalPlayer:Kick("You were kicked out using Kani Admin") else HidePlayerCompletely(target) end end end if TextChatService.ChatVersion == Enum.ChatVersion.TextChatService then TextChatService.OnIncomingMessage = function(message) if message.TextSource then processCommand(message.Text, message.TextSource) end end else local chatEvents = ReplicatedStorage:WaitForChild("DefaultChatSystemChatEvents", 5) if chatEvents then chatEvents.OnMessageDoneFiltering.OnClientEvent:Connect(function(data) processCommand(data.Message, data.FromSpeaker) end) end end -- أزرار التبويب الأول AdminTab:Button({ Title = "Kill & Explode", Callback = function() local t = Players:FindFirstChild(selectedPlayerName); if t then ExplodePlayer(t) end end }) AdminTab:Button({ Title = "Jail (حبس مطارد ثابت)", Callback = function() local t = Players:FindFirstChild(selectedPlayerName); if t then executeCage(t) end end }) AdminTab:Button({ Title = "Remove All Cages", Callback = function() for _, c in pairs(cages) do if c and c.Parent then c:Destroy() end end; cages = {}; for _, p in ipairs(Players:GetPlayers()) do if p.Character and p.Character:FindFirstChild("HumanoidRootPart") then p.Character.HumanoidRootPart.Anchored = false end end end }) AdminTab:Button({ Title = "Enter Real Backroom", Callback = function() local t = Players:FindFirstChild(selectedPlayerName); if t then StartBackroom(t) end end }) AdminTab:Button({ Title = "Ban (إخفاء اللاعب نهائياً)", Callback = function() local t = Players:FindFirstChild(selectedPlayerName); if t then HidePlayerCompletely(t); PlayerDropdown:Refresh(getPlayerNames()) end end }) AdminTab:Button({ Title = "Return to Spawn", Callback = function() lockTarget = nil; targetLockPos = nil; local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart"); if hrp then hrp.CFrame = CFrame.new(0, 50, 0) end; local b = workspace:FindFirstChild("KaniBackroom"); if b then b:Destroy() end end }) AdminTab:Toggle({ Title = "Fly (WASD) 🕊️", Value = false, Callback = function(state) stopFly() if not state then return end local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") local cam = workspace.CurrentCamera if not hrp or not cam then return end flyBV = Instance.new("BodyVelocity", hrp) flyBV.MaxForce = Vector3.new(math.huge, math.huge, math.huge) flyBG = Instance.new("BodyGyro", hrp) flyBG.MaxTorque = Vector3.new(math.huge, math.huge, math.huge) flyConnection = RunService.RenderStepped:Connect(function() local cur = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") if not cur then stopFly(); return end local dir = Vector3.new() if UserInputService:IsKeyDown(Enum.KeyCode.W) then dir = dir + cam.CFrame.LookVector end if UserInputService:IsKeyDown(Enum.KeyCode.S) then dir = dir - cam.CFrame.LookVector end if UserInputService:IsKeyDown(Enum.KeyCode.A) then dir = dir - cam.CFrame.RightVector end if UserInputService:IsKeyDown(Enum.KeyCode.D) then dir = dir + cam.CFrame.RightVector end if UserInputService:IsKeyDown(Enum.KeyCode.Space) then dir = dir + Vector3.new(0, 1, 0) end if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) then dir = dir - Vector3.new(0, 1, 0) end flyBV.Velocity = dir.Magnitude > 0 and (dir.Unit * 60) or Vector3.new() flyBG.CFrame = cam.CFrame end) end }) -- 🌟 أزرار التبويب الثاني (Admin HD) بعد التصليح 🌟 HDAdminTab:Button({ Title = "Bring All (جلب الجميع إليك)", Callback = function() local myHrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") if myHrp then for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer and p.Character and p.Character:FindFirstChild("HumanoidRootPart") then p.Character.HumanoidRootPart.CFrame = myHrp.CFrame * CFrame.new(math.random(-5, 5), 0, -5) end end end WindUI:Notify({ Title = "Admin HD", Content = "تم جلب الجميع!", Duration = 3 }) end }) HDAdminTab:Button({ Title = "Jail All (حبس الجميع)", Callback = function() for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer then executeCage(p) end end WindUI:Notify({ Title = "Admin HD", Content = "تم حبس الجميع في أقفاص منفصلة!", Duration = 3 }) end }) HDAdminTab:Button({ Title = "Kill All (تفجير الجميع)", Callback = function() for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer then ExplodePlayer(p) end end WindUI:Notify({ Title = "Admin HD", Content = "تم تفجير الجميع!", Duration = 3 }) end }) WindUI:Notify({ Title = "Kani Admin V4.1", Content = "تم تصليح مشاكل الحبس والاختفاء!", Duration = 5 })