local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local Workspace = game:GetService("Workspace") local ReplicatedStorage = game:GetService("ReplicatedStorage") local LocalPlayer = Players.LocalPlayer local grabEventsFolder = ReplicatedStorage:FindFirstChild("GrabEvents") local setNetworkOwnerEvent = grabEventsFolder and grabEventsFolder:FindFirstChild("SetNetworkOwner") local destroyGrabLineEvent = grabEventsFolder and grabEventsFolder:FindFirstChild("DestroyGrabLine") task.spawn(function() if not grabEventsFolder then grabEventsFolder = ReplicatedStorage:WaitForChild("GrabEvents", 5) end if grabEventsFolder then setNetworkOwnerEvent = setNetworkOwnerEvent or grabEventsFolder:WaitForChild("SetNetworkOwner", 3) destroyGrabLineEvent = destroyGrabLineEvent or grabEventsFolder:WaitForChild("DestroyGrabLine", 3) end end) local isActive = false local isCircleActive = false local isSaturnActive = false local isOrbitActive = false local isRandomActive = false local isCompressing = false local isMinimized = false local isDropdownOpen = false local activeProps = {} local explodedBlacklist = {} local globalItemCount = 0 local selectedTargetMode = "Me" local targetPlayer = LocalPlayer local randomWanderPos = Vector3.new(0, 50, 0) local wanderTimer = 0 local saturnCenterPos = Vector3.new(0, 100, 0) -- Anti-Grab ذكي وسريع يعتمد على تكرار انتزاع الملكية دون كسر المجسمات local function claimOwnership(part) if not part or not part:IsA("BasePart") then return end task.spawn(function() local char = LocalPlayer.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") local targetCFrame = hrp and hrp.CFrame or part.CFrame for i = 1, 3 do if not part or not part.Parent then break end pcall(function() if destroyGrabLineEvent then destroyGrabLineEvent:FireServer(part) end if setNetworkOwnerEvent then setNetworkOwnerEvent:FireServer(part, targetCFrame) end part:SetNetworkOwner(LocalPlayer) end) task.wait(0.03) end end) end -- GUI Setup local screenGui = Instance.new("ScreenGui") screenGui.Name = "TarekScripterTornadoGUIv4" screenGui.ResetOnSpawn = false if syn and syn.protect_gui then syn.protect_gui(screenGui) screenGui.Parent = game:GetService("CoreGui") elseif gethui then screenGui.Parent = gethui() else screenGui.Parent = LocalPlayer:WaitForChild("PlayerGui") end local mainFrame = Instance.new("Frame") mainFrame.Name = "MainFrame" mainFrame.Size = UDim2.new(0, 240, 0, 400) mainFrame.Position = UDim2.new(0.65, 0, 0.20, 0) mainFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 22) mainFrame.BorderSizePixel = 0 mainFrame.ClipsDescendants = false mainFrame.Active = true mainFrame.Parent = screenGui Instance.new("UICorner", mainFrame).CornerRadius = UDim.new(0, 12) local mainStroke = Instance.new("UIStroke", mainFrame) mainStroke.Color = Color3.fromRGB(70, 70, 90) mainStroke.Thickness = 1.5 local titleBar = Instance.new("Frame") titleBar.Name = "TitleBar" titleBar.Size = UDim2.new(1, 0, 0, 40) titleBar.BackgroundColor3 = Color3.fromRGB(28, 28, 35) titleBar.BorderSizePixel = 0 titleBar.Parent = mainFrame Instance.new("UICorner", titleBar).CornerRadius = UDim.new(0, 12) local titleLabel = Instance.new("TextLabel") titleLabel.Size = UDim2.new(1, -70, 1, 0) titleLabel.Position = UDim2.new(0, 12, 0, 0) titleLabel.BackgroundTransparency = 1 titleLabel.Text = "tarekscripter tornado v4" titleLabel.TextColor3 = Color3.fromRGB(255, 255, 255) titleLabel.Font = Enum.Font.GothamBold titleLabel.TextSize = 13 titleLabel.TextXAlignment = Enum.TextXAlignment.Left titleLabel.Parent = titleBar local minBtn = Instance.new("TextButton") minBtn.Size = UDim2.new(0, 26, 0, 26) minBtn.Position = UDim2.new(1, -60, 0, 7) minBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 55) minBtn.TextColor3 = Color3.fromRGB(255, 255, 255) minBtn.Font = Enum.Font.GothamBold minBtn.Text = "-" minBtn.TextSize = 16 minBtn.Parent = titleBar Instance.new("UICorner", minBtn).CornerRadius = UDim.new(0, 6) local closeBtn = Instance.new("TextButton") closeBtn.Size = UDim2.new(0, 26, 0, 26) closeBtn.Position = UDim2.new(1, -30, 0, 7) closeBtn.BackgroundColor3 = Color3.fromRGB(210, 50, 50) closeBtn.TextColor3 = Color3.fromRGB(255, 255, 255) closeBtn.Font = Enum.Font.GothamBold closeBtn.Text = "X" closeBtn.TextSize = 13 closeBtn.Parent = titleBar Instance.new("UICorner", closeBtn).CornerRadius = UDim.new(0, 6) local contentFrame = Instance.new("Frame") contentFrame.Name = "ContentFrame" contentFrame.Size = UDim2.new(1, 0, 1, -40) contentFrame.Position = UDim2.new(0, 0, 0, 40) contentFrame.BackgroundTransparency = 1 contentFrame.Parent = mainFrame local targetDropdownBtn = Instance.new("TextButton") targetDropdownBtn.Size = UDim2.new(0.9, 0, 0, 32) targetDropdownBtn.Position = UDim2.new(0.05, 0, 0.02, 0) targetDropdownBtn.BackgroundColor3 = Color3.fromRGB(35, 35, 45) targetDropdownBtn.TextColor3 = Color3.fromRGB(200, 200, 220) targetDropdownBtn.Font = Enum.Font.GothamMedium targetDropdownBtn.Text = "Target: Me" targetDropdownBtn.TextSize = 12 targetDropdownBtn.Parent = contentFrame Instance.new("UICorner", targetDropdownBtn).CornerRadius = UDim.new(0, 6) local dropdownList = Instance.new("ScrollingFrame") dropdownList.Size = UDim2.new(0.9, 0, 0, 110) dropdownList.Position = UDim2.new(0.05, 0, 0.12, 0) dropdownList.BackgroundColor3 = Color3.fromRGB(25, 25, 32) dropdownList.BorderSizePixel = 0 dropdownList.Visible = false dropdownList.CanvasSize = UDim2.new(0, 0, 0, 0) dropdownList.ScrollBarThickness = 4 dropdownList.ZIndex = 10 dropdownList.Parent = contentFrame Instance.new("UICorner", dropdownList).CornerRadius = UDim.new(0, 6) local listLayout = Instance.new("UIListLayout") listLayout.SortOrder = Enum.SortOrder.LayoutOrder listLayout.Parent = dropdownList local function updateDropdownList() for _, child in ipairs(dropdownList:GetChildren()) do if child:IsA("TextButton") then child:Destroy() end end local options = {"Me", "Random Map"} for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer then table.insert(options, p.DisplayName) end end dropdownList.CanvasSize = UDim2.new(0, 0, 0, #options * 28) for i, opt in ipairs(options) do local optBtn = Instance.new("TextButton") optBtn.Size = UDim2.new(1, 0, 0, 28) optBtn.BackgroundColor3 = Color3.fromRGB(30, 30, 40) optBtn.TextColor3 = Color3.fromRGB(240, 240, 240) optBtn.Font = Enum.Font.Gotham optBtn.Text = opt optBtn.TextSize = 11 optBtn.ZIndex = 11 optBtn.Parent = dropdownList optBtn.Activated:Connect(function() if opt == "Me" then selectedTargetMode = "Me" targetPlayer = LocalPlayer targetDropdownBtn.Text = "Target: Me" elseif opt == "Random Map" then selectedTargetMode = "Random" targetDropdownBtn.Text = "Target: Random Map" else selectedTargetMode = "Player" for _, p in ipairs(Players:GetPlayers()) do if p.DisplayName == opt then targetPlayer = p break end end targetDropdownBtn.Text = "Target: " .. opt end isDropdownOpen = false dropdownList.Visible = false end) end end targetDropdownBtn.Activated:Connect(function() isDropdownOpen = not isDropdownOpen if isDropdownOpen then updateDropdownList() dropdownList.Visible = true else dropdownList.Visible = false end end) local btn = Instance.new("TextButton") btn.Size = UDim2.new(0.9, 0, 0, 30) btn.Position = UDim2.new(0.05, 0, 0.18, 0) btn.BackgroundColor3 = Color3.fromRGB(220, 50, 50) btn.TextColor3 = Color3.fromRGB(255, 255, 255) btn.Font = Enum.Font.GothamBold btn.Text = "TORNADO: OFF (R)" btn.TextSize = 11 btn.Parent = contentFrame Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 8) local circleBtn = Instance.new("TextButton") circleBtn.Size = UDim2.new(0.9, 0, 0, 30) circleBtn.Position = UDim2.new(0.05, 0, 0.33, 0) circleBtn.BackgroundColor3 = Color3.fromRGB(40, 110, 220) circleBtn.TextColor3 = Color3.fromRGB(255, 255, 255) circleBtn.Font = Enum.Font.GothamBold circleBtn.Text = "BALL: OFF (C)" circleBtn.TextSize = 11 circleBtn.Parent = contentFrame Instance.new("UICorner", circleBtn).CornerRadius = UDim.new(0, 8) local saturnBtn = Instance.new("TextButton") saturnBtn.Size = UDim2.new(0.9, 0, 0, 30) saturnBtn.Position = UDim2.new(0.05, 0, 0.48, 0) saturnBtn.BackgroundColor3 = Color3.fromRGB(210, 140, 30) saturnBtn.TextColor3 = Color3.fromRGB(255, 255, 255) saturnBtn.Font = Enum.Font.GothamBold saturnBtn.Text = "SATURN: OFF (X)" saturnBtn.TextSize = 11 saturnBtn.Parent = contentFrame Instance.new("UICorner", saturnBtn).CornerRadius = UDim.new(0, 8) local orbitBtn = Instance.new("TextButton") orbitBtn.Size = UDim2.new(0.9, 0, 0, 30) orbitBtn.Position = UDim2.new(0.05, 0, 0.63, 0) orbitBtn.BackgroundColor3 = Color3.fromRGB(150, 50, 220) orbitBtn.TextColor3 = Color3.fromRGB(255, 255, 255) orbitBtn.Font = Enum.Font.GothamBold orbitBtn.Text = "ORBIT: OFF (O)" orbitBtn.TextSize = 11 orbitBtn.Parent = contentFrame Instance.new("UICorner", orbitBtn).CornerRadius = UDim.new(0, 8) local blastBtn = Instance.new("TextButton") blastBtn.Size = UDim2.new(0.9, 0, 0, 30) blastBtn.Position = UDim2.new(0.05, 0, 0.78, 0) blastBtn.BackgroundColor3 = Color3.fromRGB(240, 130, 20) blastBtn.TextColor3 = Color3.fromRGB(255, 255, 255) blastBtn.Font = Enum.Font.GothamBold blastBtn.Text = "COMPRESS & BLAST (T)" blastBtn.TextSize = 11 blastBtn.Parent = contentFrame Instance.new("UICorner", blastBtn).CornerRadius = UDim.new(0, 8) -- Dragging Functionality local dragging, dragStart, startPos titleBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position startPos = mainFrame.Position end end) UserInputService.InputChanged:Connect(function(input) if dragging and (input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseMovement) then local delta = input.Position - dragStart mainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) minBtn.Activated:Connect(function() isMinimized = not isMinimized if isMinimized then contentFrame.Visible = false mainFrame.Size = UDim2.new(0, 240, 0, 40) minBtn.Text = "+" else contentFrame.Visible = true mainFrame.Size = UDim2.new(0, 240, 0, 400) minBtn.Text = "-" end end) local function isValidProp(part) if not part or not part:IsA("BasePart") or part.Anchored then return false end if explodedBlacklist[part] then return false end local ancestor = part:FindFirstAncestorOfClass("Model") if ancestor and ancestor:FindFirstChildOfClass("Humanoid") then return false end if part.Parent and part.Parent:FindFirstChildOfClass("Humanoid") then return false end return true end local function removePropPhysics(part) if activeProps[part] then local data = activeProps[part] if data.AP then data.AP:Destroy() end if data.AO then data.AO:Destroy() end if data.Att then data.Att:Destroy() end activeProps[part] = nil end if part and part:IsDescendantOf(workspace) then pcall(function() part:SetNetworkOwner(nil) end) end end local function stopAllModes() isActive = false isCircleActive = false isSaturnActive = false isOrbitActive = false isRandomActive = false isCompressing = false globalItemCount = 0 btn.Text = "TORNADO: OFF (R)" btn.BackgroundColor3 = Color3.fromRGB(220, 50, 50) circleBtn.Text = "BALL: OFF (C)" circleBtn.BackgroundColor3 = Color3.fromRGB(40, 110, 220) saturnBtn.Text = "SATURN: OFF (X)" saturnBtn.BackgroundColor3 = Color3.fromRGB(210, 140, 30) orbitBtn.Text = "ORBIT: OFF (O)" orbitBtn.BackgroundColor3 = Color3.fromRGB(150, 50, 220) for part, _ in pairs(activeProps) do removePropPhysics(part) end activeProps = {} explodedBlacklist = {} end closeBtn.Activated:Connect(function() stopAllModes() screenGui:Destroy() end) local function attachPhysicsToProp(part) if activeProps[part] or not isValidProp(part) then return end -- استخدام الحماية السريعة لتثبيت الملكية عند الإمساك claimOwnership(part) local att = Instance.new("Attachment") att.Name = "GrabbedAtt" att.Parent = part local ao = Instance.new("AlignOrientation") ao.Mode = Enum.OrientationAlignmentMode.OneAttachment ao.Attachment0 = att ao.MaxTorque = math.huge ao.Responsiveness = 100 ao.CFrame = part.CFrame ao.Parent = part local ap = Instance.new("AlignPosition") ap.Mode = Enum.PositionAlignmentMode.OneAttachment ap.Attachment0 = att ap.MaxForce = math.huge ap.MaxVelocity = 1200 ap.Responsiveness = 90 ap.Parent = part globalItemCount = globalItemCount + 1 local section = ((globalItemCount - 1) % 3) + 1 local subSlot = math.floor((globalItemCount - 1) / 3) % 10 activeProps[part] = { Part = part, Att = att, AO = ao, AP = ap, Section = section, SubSlot = subSlot, AngleOffset = (globalItemCount * 0.5) } end Workspace.ChildAdded:Connect(function(child) if not isActive and not isCircleActive and not isSaturnActive and not isOrbitActive and not isRandomActive then return end if child.Name == "GrabParts" then task.spawn(function() local success, grabbedPart = pcall(function() local grabPart = child:WaitForChild("GrabPart", 1.5) local weld = grabPart:WaitForChild("WeldConstraint", 1.5) return weld.Part1 end) if success and grabbedPart and isValidProp(grabbedPart) then attachPhysicsToProp(grabbedPart) end end) end end) local function getTargetPosition() if selectedTargetMode == "Random" then return randomWanderPos elseif selectedTargetMode == "Player" and targetPlayer and targetPlayer.Character then local targetRoot = targetPlayer.Character:FindFirstChild("HumanoidRootPart") if targetRoot then return targetRoot.Position end end local char = LocalPlayer.Character if char then local root = char:FindFirstChild("HumanoidRootPart") if root then return root.Position end end return Vector3.new(0, 10, 0) end local function triggerCompressAndBlast() if (not isActive and not isCircleActive and not isSaturnActive and not isOrbitActive and not isRandomActive) or isCompressing then return end isCompressing = true local targetPos = isSaturnActive and saturnCenterPos or (getTargetPosition() + Vector3.new(0, 110, 0)) local compressPoint = targetPos for part, data in pairs(activeProps) do if part and part:IsDescendantOf(workspace) then data.AP.Position = compressPoint end end task.wait(1) local exp = Instance.new("Explosion") exp.Position = compressPoint exp.BlastRadius = 150 exp.BlastPressure = 0 exp.Parent = workspace local propsToBlast = {} for part, _ in pairs(activeProps) do table.insert(propsToBlast, part) end for _, part in ipairs(propsToBlast) do if part and part:IsDescendantOf(workspace) then removePropPhysics(part) explodedBlacklist[part] = true task.delay(2.5, function() explodedBlacklist[part] = nil end) local randomDirection = Vector3.new(math.random(-100, 100), math.random(30, 120), math.random(-100, 100)).Unit part.AssemblyLinearVelocity = randomDirection * math.random(1200, 2500) part.AssemblyAngularVelocity = Vector3.new(math.random(-200, 200), math.random(-200, 200), math.random(-200, 200)) end end isCompressing = false end local function toggleTornado() if isActive then stopAllModes() else stopAllModes() isActive = true globalItemCount = 0 btn.Text = "TORNADO: ON (R)" btn.BackgroundColor3 = Color3.fromRGB(50, 200, 50) end end local function toggleCircle() if isCircleActive then stopAllModes() else stopAllModes() isCircleActive = true globalItemCount = 0 circleBtn.Text = "BALL: ON (C)" circleBtn.BackgroundColor3 = Color3.fromRGB(40, 150, 240) end end local function toggleSaturn() if isSaturnActive then stopAllModes() else stopAllModes() isSaturnActive = true globalItemCount = 0 local currentPos = getTargetPosition() saturnCenterPos = currentPos + Vector3.new(0, 100, 0) saturnBtn.Text = "SATURN: ON (X)" saturnBtn.BackgroundColor3 = Color3.fromRGB(240, 180, 40) end end local function toggleOrbit() if isOrbitActive then stopAllModes() else stopAllModes() isOrbitActive = true globalItemCount = 0 orbitBtn.Text = "ORBIT: ON (O)" orbitBtn.BackgroundColor3 = Color3.fromRGB(180, 70, 240) end end btn.Activated:Connect(toggleTornado) circleBtn.Activated:Connect(toggleCircle) saturnBtn.Activated:Connect(toggleSaturn) orbitBtn.Activated:Connect(toggleOrbit) blastBtn.Activated:Connect(triggerCompressAndBlast) UserInputService.InputBegan:Connect(function(input, gpe) if gpe then return end if input.KeyCode == Enum.KeyCode.R then toggleTornado() elseif input.KeyCode == Enum.KeyCode.C then toggleCircle() elseif input.KeyCode == Enum.KeyCode.X then toggleSaturn() elseif input.KeyCode == Enum.KeyCode.O then toggleOrbit() elseif input.KeyCode == Enum.KeyCode.T then triggerCompressAndBlast() elseif input.KeyCode == Enum.KeyCode.M then mainFrame.Visible = not mainFrame.Visible end end) RunService.Stepped:Connect(function() if (not isActive and not isCircleActive and not isSaturnActive and not isOrbitActive) or isCompressing then return end local timeSeconds = workspace.DistributedGameTime if selectedTargetMode == "Random" and not isSaturnActive then wanderTimer = wanderTimer + RunService.Stepped:Wait() if wanderTimer > 4 then wanderTimer = 0 randomWanderPos = Vector3.new(math.random(-300, 300), 20, math.random(-300, 300)) end end local targetPos = getTargetPosition() local totalParts = 0 for _ in pairs(activeProps) do totalParts = totalParts + 1 end if totalParts == 0 then return end local index = 0 for part, data in pairs(activeProps) do if not part or not part:IsDescendantOf(workspace) or part.Anchored then removePropPhysics(part) else index = index + 1 if isActive then local angle = (timeSeconds * 3.5) + data.AngleOffset local baseHeight, sectionLength, startRadius, endRadius = 10, 50, 15, 35 if data.Section == 2 then baseHeight, sectionLength, startRadius, endRadius = 60, 75, 35, 75 elseif data.Section == 3 then baseHeight, sectionLength, startRadius, endRadius = 135, 100, 75, 130 end local slotProgress = (data.SubSlot + 0.5) / 10 local height = baseHeight + (slotProgress * sectionLength) local radius = startRadius + (slotProgress * (endRadius - startRadius)) local targetPosCalc = targetPos + Vector3.new(math.cos(angle) * radius, height, math.sin(angle) * radius) data.AP.Position = targetPosCalc data.AO.CFrame = CFrame.new(part.Position, targetPosCalc) elseif isCircleActive then local sphereCenter = targetPos + Vector3.new(0, 65, 0) local sphereRadius = 55 local phi = math.acos(1 - 2 * ((index - 0.5) / totalParts)) local theta = math.sqrt(totalParts * math.pi) * phi + (timeSeconds * 1.5) local targetPosCalc = sphereCenter + Vector3.new( sphereRadius * math.sin(phi) * math.cos(theta), sphereRadius * math.cos(phi), sphereRadius * math.sin(phi) * math.sin(theta) ) data.AP.Position = targetPosCalc data.AO.CFrame = CFrame.new(part.Position, targetPosCalc) elseif isSaturnActive then local targetPosCalc if index <= 30 then local maxSphereCount = math.min(totalParts, 30) local sphereRadius = 22 local y = 1 - (index - 0.5) / maxSphereCount * 2 local radiusAtY = math.sqrt(1 - y * y) * sphereRadius local theta = index * math.pi * (3 - math.sqrt(5)) + (timeSeconds * 1.2) local localPos = Vector3.new( radiusAtY * math.cos(theta), y * sphereRadius, radiusAtY * math.sin(theta) ) targetPosCalc = saturnCenterPos + localPos else local ringIndex = index - 30 local totalRingParts = totalParts - 30 local innerRadius = 35 local outerRadius = 75 local ringProgress = (ringIndex - 0.5) / totalRingParts local currentRadius = innerRadius + (ringProgress * (outerRadius - innerRadius)) local angle = (ringIndex * 0.6) + (timeSeconds * 1.8) local flatRingPos = Vector3.new(math.cos(angle) * currentRadius, 0, math.sin(angle) * currentRadius) local ringTiltCFrame = CFrame.Angles(math.rad(25), 0, math.rad(15)) local tiltedOffset = ringTiltCFrame:VectorToWorldSpace(flatRingPos) targetPosCalc = saturnCenterPos + tiltedOffset end data.AP.Position = targetPosCalc data.AO.CFrame = CFrame.new(part.Position, targetPosCalc) elseif isOrbitActive then local itemsPerRing = 12 local ringRadius = 20 local verticalGap = 8 local ringIndex = math.floor((index - 1) / itemsPerRing) local indexInRing = (index - 1) % itemsPerRing local ringDirection = (ringIndex % 2 == 0) and 1 or -1 local rotationSpeed = 2.2 * ringDirection local angle = (indexInRing / itemsPerRing) * (math.pi * 2) + (timeSeconds * rotationSpeed) local ringHeight = ringIndex * verticalGap local orbitOffset = Vector3.new( math.cos(angle) * ringRadius, ringHeight, math.sin(angle) * ringRadius ) local targetPosCalc = targetPos + orbitOffset data.AP.Position = targetPosCalc data.AO.CFrame = CFrame.new(part.Position, targetPosCalc) end end end end)