if game.PlaceId == 6961824067 then print("ยินดีต้อนรับเข้าสู่ Jujutsu Shenanigans!") end local Rayfield = loadstring(game:HttpGet('https://sirius.menu/rayfield'))() local Window = Rayfield:CreateWindow({ Name = "Moon Hub I FTAP", Icon = 0, LoadingTitle = "load window wait...", LoadingSubtitle = "by oceancrimsno", Theme = { TextFont = "Default", TextColor = Color3.fromRGB(245, 240, 240), Background = Color3.fromRGB(15, 12, 12), Topbar = Color3.fromRGB(25, 18, 18), Shadow = Color3.fromRGB(5, 3, 3), NotificationBackground = Color3.fromRGB(22, 15, 15), NotificationActionsBackground = Color3.fromRGB(240, 200, 200), TabBackground = Color3.fromRGB(35, 20, 20), TabStroke = Color3.fromRGB(60, 30, 30), TabBackgroundSelected = Color3.fromRGB(200, 60, 30), TabTextColor = Color3.fromRGB(200, 170, 170), SelectedTabTextColor = Color3.fromRGB(255, 255, 255), ElementBackground = Color3.fromRGB(25, 18, 18), ElementBackgroundHover = Color3.fromRGB(35, 24, 24), SecondaryElementBackground = Color3.fromRGB(15, 12, 12), ElementStroke = Color3.fromRGB(50, 25, 25), SecondaryElementStroke = Color3.fromRGB(40, 20, 20), SliderBackground = Color3.fromRGB(220, 80, 30), SliderProgress = Color3.fromRGB(240, 100, 30), SliderStroke = Color3.fromRGB(255, 140, 60), ToggleBackground = Color3.fromRGB(22, 15, 15), ToggleEnabled = Color3.fromRGB(220, 70, 30), ToggleDisabled = Color3.fromRGB(80, 60, 60), ToggleEnabledStroke = Color3.fromRGB(255, 120, 50), ToggleDisabledStroke = Color3.fromRGB(50, 40, 40), ToggleEnabledOuterStroke = Color3.fromRGB(140, 50, 20), ToggleDisabledOuterStroke = Color3.fromRGB(40, 30, 30), DropdownSelected = Color3.fromRGB(35, 20, 20), DropdownUnselected = Color3.fromRGB(22, 15, 15), InputBackground = Color3.fromRGB(22, 15, 15), InputStroke = Color3.fromRGB(60, 30, 30), PlaceholderColor = Color3.fromRGB(160, 130, 130) }, ToggleUIKeybind = "K", DisableRayfieldPrompts = false, DisableBuildWarnings = false, ConfigurationSaving = { Enabled = true, FolderName = nil, FileName = "MoonHubConfig" }, Discord = { Enabled = false, Invite = "noinvitelink", RememberJoins = true }, KeySystem = false, KeySettings = { Title = "Untitled", Subtitle = "Key System", Note = "No method of obtaining the key is provided", FileName = "Key", SaveKey = true, GrabKeyFromSite = false, Key = {"Hello"} } }) -- บริการหลักและตัวแปร local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local Workspace = game:GetService("Workspace") local Debris = game:GetService("Debris") local Clipboard = setclipboard or toclipboard local ReplicatedStorage = game:GetService("ReplicatedStorage") local LocalPlayer = Players.LocalPlayer local Camera = Workspace.CurrentCamera -- ==================== PLAYERS TAB ==================== local PlayersTab = Window:CreateTab("Players", "users") local PlayersSection = PlayersTab:CreateSection("Server Players List") local selectedPlayerName = "" local selectedPlayerIdText = nil local playerDropdown = nil local playerNamesTable = {} local function UpdatePlayerList() playerNamesTable = {} for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer then table.insert(playerNamesTable, player.Name) end end if #playerNamesTable == 0 then table.insert(playerNamesTable, "No Other Players") end end UpdatePlayerList() Players.PlayerAdded:Connect(function(player) UpdatePlayerList() if playerDropdown then playerDropdown:Refresh(playerNamesTable, true) end end) Players.PlayerRemoving:Connect(function(player) UpdatePlayerList() if playerDropdown then playerDropdown:Refresh(playerNamesTable, true) end end) playerDropdown = PlayersTab:CreateDropdown({ Name = "Select Player", Options = playerNamesTable, CurrentOption = playerNamesTable[1] or "", Flag = "Player_Dropdown", Callback = function(Option) if type(Option) == "table" then selectedPlayerName = Option[1] or "" else selectedPlayerName = tostring(Option) end local targetPlayer = Players:FindFirstChild(selectedPlayerName) if targetPlayer and selectedPlayerIdText then selectedPlayerIdText:Set("Selected Player ID: " .. tostring(targetPlayer.UserId)) elseif selectedPlayerIdText then selectedPlayerIdText:Set("Selected Player ID: N/A") end end, }) local initialId = "N/A" local firstTarget = Players:FindFirstChild(playerNamesTable[1]) if firstTarget then selectedPlayerName = firstTarget.Name initialId = tostring(firstTarget.UserId) end selectedPlayerIdText = PlayersTab:CreateParagraph({ Title = "Player Information", Content = "Selected Player ID: " .. initialId }) PlayersTab:CreateButton({ Name = "Copy Player ID", Callback = function() local targetPlayer = Players:FindFirstChild(selectedPlayerName) if targetPlayer then if Clipboard then Clipboard(tostring(targetPlayer.UserId)) Rayfield:Notify({ Title = "Success", Content = "คัดลอก User ID ของ " .. targetPlayer.Name .. " แล้ว!", Duration = 2, }) else Rayfield:Notify({ Title = "Error", Content = "ระบบของคุณไม่รองรับการคัดลอกอัตโนมัติ (Clipboard)", Duration = 2, }) end else Rayfield:Notify({ Title = "Error", Content = "ไม่พบผู้เล่นที่เลือก", Duration = 2, }) end end, }) PlayersTab:CreateButton({ Name = "Refresh Player List", Callback = function() UpdatePlayerList() if playerDropdown then playerDropdown:Refresh(playerNamesTable, true) end Rayfield:Notify({ Title = "Player List", Content = "รีเฟรชรายชื่อผู้เล่นเรียบร้อยแล้ว", Duration = 2, }) end, }) PlayersTab:CreateButton({ Name = "Teleport to Player", Callback = function() local targetPlayer = Players:FindFirstChild(selectedPlayerName) if targetPlayer and targetPlayer.Character and targetPlayer.Character:FindFirstChild("HumanoidRootPart") then local localRoot = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") if localRoot then localRoot.CFrame = targetPlayer.Character.HumanoidRootPart.CFrame + Vector3.new(0, 3, 0) Rayfield:Notify({ Title = "Teleport", Content = "วาร์ปไปยัง " .. targetPlayer.Name .. " สำเร็จ!", Duration = 2, }) end else Rayfield:Notify({ Title = "Error", Content = "ไม่พบตัวละครของผู้เล่นคนนี้", Duration = 2, }) end end, }) -- ==================== MOVEMENT TAB ==================== local MoveTab = Window:CreateTab("You Option", "user") local MoveSection = MoveTab:CreateSection("Movement option") local tpWalkEnabled = false local tpWalkSpeed = 16 MoveTab:CreateToggle({ Name = "Walkspeed", CurrentValue = false, Flag = "Toggle1", Callback = function(Value) tpWalkEnabled = Value end, }) MoveTab:CreateSlider({ Name = "Walkspeed Option", Range = {0, 100}, Increment = 5, Suffix = "Speed", CurrentValue = 16, Flag = "Slider1", Callback = function(Value) tpWalkSpeed = Value end, }) RunService.RenderStepped:Connect(function(dt) if tpWalkEnabled and LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then local humanoid = LocalPlayer.Character:FindFirstChildOfClass("Humanoid") local rootPart = LocalPlayer.Character.HumanoidRootPart if humanoid and humanoid.MoveDirection.Magnitude > 0 then rootPart.CFrame = rootPart.CFrame + (humanoid.MoveDirection * tpWalkSpeed * dt) end end end) local jumpPowerEnabled = false local jumpPowerValue = 50 MoveTab:CreateToggle({ Name = "JumpPower", CurrentValue = false, Flag = "Toggle2", Callback = function(Value) jumpPowerEnabled = Value local humanoid = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid") if humanoid then humanoid.UseJumpPower = true humanoid.JumpPower = jumpPowerEnabled and jumpPowerValue or 50 end end, }) MoveTab:CreateSlider({ Name = "JumpPower Option", Range = {50, 300}, Increment = 10, Suffix = "Power", CurrentValue = 50, Flag = "Slider2", Callback = function(Value) jumpPowerValue = Value if jumpPowerEnabled then local humanoid = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid") if humanoid then humanoid.UseJumpPower = true humanoid.JumpPower = jumpPowerValue end end end, }) LocalPlayer.CharacterAdded:Connect(function(character) task.wait(0.5) local humanoid = character:WaitForChild("Humanoid") if jumpPowerEnabled then humanoid.UseJumpPower = true humanoid.JumpPower = jumpPowerValue end end) local infJumpEnabled = false MoveTab:CreateToggle({ Name = "Infinite Jump", CurrentValue = false, Flag = "Toggle_InfJump", Callback = function(Value) infJumpEnabled = Value end, }) UserInputService.JumpRequest:Connect(function() if infJumpEnabled then local character = LocalPlayer.Character if character then local humanoid = character:FindFirstChildOfClass("Humanoid") if humanoid then humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end end end end) local BarrierbreakTab = Window:CreateTab("Barrier Break") local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer -- store originals local originalMaxZoom local originalMinZoom local originalCameraMode local originalMouseLock BarrierbreakTab:CreateToggle({ Name = "Third person", Default = false, Callback = function(Value) if Value then -- save original settings originalMaxZoom = LocalPlayer.CameraMaxZoomDistance originalMinZoom = LocalPlayer.CameraMinZoomDistance originalCameraMode = LocalPlayer.CameraMode originalMouseLock = LocalPlayer.DevEnableMouseLock -- enable 3rd person camera LocalPlayer.CameraMaxZoomDistance = math.huge LocalPlayer.CameraMinZoomDistance = 0.5 LocalPlayer.CameraMode = Enum.CameraMode.Classic -- ENABLE REAL SHIFTLOCK (CoreGui) pcall(function() LocalPlayer.DevEnableMouseLock = true end) else -- restore camera if originalMaxZoom then LocalPlayer.CameraMaxZoomDistance = originalMaxZoom LocalPlayer.CameraMinZoomDistance = originalMinZoom LocalPlayer.CameraMode = originalCameraMode end -- restore shiftlock setting if originalMouseLock ~= nil then pcall(function() LocalPlayer.DevEnableMouseLock = originalMouseLock end) end end end }) BarrierbreakTab:CreateDivider() Players = game:GetService("Players") LocalPlayer = Players.LocalPlayer ReplicatedStorage = game:GetService("ReplicatedStorage") Workspace = game:GetService("Workspace") StatusLabel = BarrierbreakTab:CreateLabel("Broken: False") destroyBarrierActive = false destroyBarrierThread = nil plotsBroken = false BarrierbreakTab:CreateToggle({ Name = "Destroy Barrier (snowball)", CurrentValue = false, Flag = "DestroyBarrierHouse", Callback = function(Value) if Value and plotsBroken then Rayfield:Notify({ Title = "Already Broken", Content = "Plots are already broken!", Duration = 5, Image = 4483345998, Actions = { Ignore = { Name = "Okay!", Callback = function() print("The user tapped Okay!") end }, }, }) return end destroyBarrierActive = Value if destroyBarrierThread then task.cancel(destroyBarrierThread) destroyBarrierThread = nil end if Value then local spawnedToysFolder = workspace:FindFirstChild(LocalPlayer.Name.."SpawnedInToys") if spawnedToysFolder then for _, item in ipairs(spawnedToysFolder:GetChildren()) do if item.Name == "BallSnowball" then ReplicatedStorage.MenuToys.DestroyToy:FireServer(item) end end end if not plotsBroken then StatusLabel:Set("Broken: False") end destroyBarrierThread = task.spawn(function() local MenuToys = ReplicatedStorage:WaitForChild("MenuToys") local SetNetworkOwner = ReplicatedStorage:WaitForChild("GrabEvents"):WaitForChild("SetNetworkOwner") local DestroyGrabLine = ReplicatedStorage:WaitForChild("GrabEvents"):WaitForChild("DestroyGrabLine") local targetCFrame = CFrame.new(264.5792541503906, -5.477070331573486, 433.4557800292969) local function getSnowballs() local snowballs = {} local spawnedToysFolder = workspace:FindFirstChild(LocalPlayer.Name.."SpawnedInToys") if spawnedToysFolder then for _, toy in ipairs(spawnedToysFolder:GetChildren()) do if toy.Name == "BallSnowball" then table.insert(snowballs, toy) end end end return snowballs end local function spawnSnowball() if not destroyBarrierActive then return end local playerPosition = LocalPlayer.Character and LocalPlayer.Character.PrimaryPart.Position or Vector3.new(0, 0, 0) local initialCFrame = CFrame.new(playerPosition) * CFrame.Angles(-0.807, -0.884, -0.679) task.spawn(function() MenuToys.SpawnToyRemoteFunction:InvokeServer("BallSnowball", initialCFrame, Vector3.new(0, -120.21099853515625, 0)) end) end local function processSnowball(snowball) if not destroyBarrierActive then return end local soundPart = snowball:FindFirstChild("SoundPart") if soundPart then task.spawn(function() SetNetworkOwner:FireServer(soundPart, soundPart.CFrame) end) end end local function teleportSnowballs(snowballs) if not destroyBarrierActive then return end for _, snowball in ipairs(snowballs) do task.spawn(function() for _, part in ipairs(snowball:GetDescendants()) do if part:IsA("BasePart") then part.CFrame = targetCFrame end end end) end end local function testWithOven() if not destroyBarrierActive then return false end local targetPosition = CFrame.new(242.66055297851562, -9.196549415588379, 444.3758850097656) MenuToys.SpawnToyRemoteFunction:InvokeServer("OvenDarkGray", targetPosition, Vector3.new(0, -74.0790023803711, 0)) task.wait(0.5) local spawnedToysFolder = workspace:FindFirstChild(LocalPlayer.Name.."SpawnedInToys") local oven if spawnedToysFolder then for _, child in ipairs(spawnedToysFolder:GetChildren()) do if child.Name == "OvenDarkGray" and child:GetAttribute("AtSpawned") == nil then oven = child break end end end local stillExists = oven ~= nil if stillExists then StatusLabel:Set("Broken: True") plotsBroken = true Rayfield:Notify({ Title = "Success!", Content = "The plots have been broken successfully!", Duration = 5, Image = 4483345998, Actions = { Ignore = { Name = "Awesome!", Callback = function() print("The user tapped Awesome!") end }, }, }) end return stillExists end while destroyBarrierActive do local snowballs = getSnowballs() if #snowballs < 2 then if #snowballs < 1 then spawnSnowball() task.wait(0.02) end spawnSnowball() task.wait(0.02) snowballs = getSnowballs() end if #snowballs == 2 then for _, snowball in ipairs(snowballs) do processSnowball(snowball) end teleportSnowballs(snowballs) local ovenResult = testWithOven() if ovenResult then break else task.wait(0.05) end end task.wait(0.05) end end) else local spawnedToysFolder = workspace:FindFirstChild(LocalPlayer.Name.."SpawnedInToys") if spawnedToysFolder then for _, item in ipairs(spawnedToysFolder:GetChildren()) do if item.Name == "BallSnowball" or item.Name == "OvenDarkGray" then ReplicatedStorage.MenuToys.DestroyToy:FireServer(item) end end end if not plotsBroken then StatusLabel:Set("Broken: False") end end end, }) local AntiTab = Window:CreateTab("Anti", "Shield") Player = game:GetService("Players").LocalPlayer Camera = workspace.CurrentCamera Mouse = Player:GetMouse() UserInputService = game:GetService("UserInputService") Inventory = workspace:WaitForChild(Player.Name .. "SpawnedInToys") RunService = game:GetService("RunService") Debris = game:GetService("Debris") StarterGui = game:GetService("StarterGui") PS = game:GetService("Players") RS = game:GetService("ReplicatedStorage") R = game:GetService("RunService") Workspace = workspace Player = PS.LocalPlayer Camera = Workspace.CurrentCamera CE = RS:WaitForChild("CharacterEvents", 10) BeingHeld = Player:WaitForChild("IsHeld", 10) StruggleEvent = CE and CE:WaitForChild("Struggle") antiGucciConnection = nil safePosition = nil restoreFrames = 0 local function spawnBlobman() local args = { [1] = "CreatureBlobman", [2] = CFrame.new(0, 5000000, 0), [3] = Vector3.new(0, 60, 0) } pcall(function() ReplicatedStorage.MenuToys.SpawnToyRemoteFunction:InvokeServer(unpack(args)) end) local folder = Workspace:WaitForChild(Player.Name .. "SpawnedInToys", 5) if folder and folder:FindFirstChild("CreatureBlobman") then local blob = folder.CreatureBlobman if blob:FindFirstChild("Head") then blob.Head.CFrame = CFrame.new(0, 50000, 0) blob.Head.Anchored = true end end end function startAntiGucci() local character = Player.Character or Player.CharacterAdded:Wait() local humanoid = character:WaitForChild("Humanoid") local rootPart = character:WaitForChild("HumanoidRootPart") safePosition = rootPart.Position local folder = Workspace:FindFirstChild(Player.Name .. "SpawnedInToys") local blob = folder and folder:FindFirstChild("CreatureBlobman") local seat = blob and blob:FindFirstChild("VehicleSeat") if not blob then spawnBlobman() task.wait(.5) folder = Workspace:FindFirstChild(Player.Name .. "SpawnedInToys") blob = folder and folder:FindFirstChild("CreatureBlobman") seat = blob and blob:FindFirstChild("VehicleSeat") end if seat and seat:IsA("VehicleSeat") then rootPart.CFrame = seat.CFrame + Vector3.new(0, 2, 0) seat:Sit(humanoid) end humanoid:GetPropertyChangedSignal("Jump"):Connect(function() if humanoid.Jump and humanoid.Sit then restoreFrames = 15 safePosition = rootPart.Position end end) if antiGucciConnection then antiGucciConnection:Disconnect() end antiGucciConnection = R.Heartbeat:Connect(function() if not rootPart or not humanoid then return end ReplicatedStorage.CharacterEvents.RagdollRemote:FireServer(rootPart, 0) if restoreFrames > 0 then rootPart.CFrame = CFrame.new(safePosition) restoreFrames = restoreFrames - 1 end end) task.spawn(function() while humanoid.Sit do task.wait(.5) end task.wait(0.1) rootPart.CFrame = CFrame.new(safePosition) end) end function stopAntiGucci() if antiGucciConnection then antiGucciConnection:Disconnect() antiGucciConnection = nil end local blobFolder = Workspace:FindFirstChild(Player.Name .. "SpawnedInToys") if blobFolder and blobFolder:FindFirstChild("CreatureBlobman") then blobFolder.CreatureBlobman:Destroy() end end autoGucciActive = false AntiTab:CreateToggle({ Name = "Gucci anti (if you can't grab just turn off toggle :p)", CurrentValue = false, Flag = "GuciiiToggle", Callback = function(Value) autoGucciActive = Value if Value then startAntiGucci() task.spawn(function() while autoGucciActive do local toysFolder = Workspace:FindFirstChild(Player.Name .. "SpawnedInToys") local blobExists = toysFolder and toysFolder:FindFirstChild("CreatureBlobman") if not blobExists then stopAntiGucci() spawnBlobman() local retries = 0 repeat task.wait(0.1) retries = retries + 1 toysFolder = Workspace:FindFirstChild(Player.Name .. "SpawnedInToys") until (toysFolder and toysFolder:FindFirstChild("CreatureBlobman")) or retries > 25 or not autoGucciActive if autoGucciActive and toysFolder and toysFolder:FindFirstChild("CreatureBlobman") then startAntiGucci() end end task.wait(0.3) end end) else autoGucciActive = false stopAntiGucci() end end }) --gucci end AntiTab:CreateButton({ Name = "Spawn Blobman", Callback = function() spawnBlobman() end }) AntiTab:CreateButton({ Name = "Sit on Blobman(to fix desyncs)", Callback = function() local blob = findBlobman() if blob then local seat = blob:FindFirstChild("VehicleSeat") local char = LocalPlayer.Character local humanoid = char and char:FindFirstChild("Humanoid") if seat and humanoid then seat:Sit(humanoid) end end end }) plr = game:GetService("Players") localdidi = plr.LocalPlayer hookActive = false function HookedPCLDBreak() hookActive = true char = localdidi.Character if not char then return end hrp = char:FindFirstChild("HumanoidRootPart") hum = char:FindFirstChild("Humanoid") if not hrp or not hum then return end killedAfterRespawn = false savedCFrame = hrp.CFrame hrp.CFrame = CFrame.new(hrp.Position.X, 50000, hrp.Position.Z) task.wait(0.05) hum.Health = 0 localdidi.CharacterAdded:Once(function(newChar) newHrp = newChar:WaitForChild("HumanoidRootPart", 5) newHum = newChar:WaitForChild("Humanoid", 5) if newHrp and newHum then task.wait(0.1) newHrp.CFrame = savedCFrame if not killedAfterRespawn then killedAfterRespawn = true task.wait(0.05) newHum.Health = 0 end end end) end AntiTab:CreateButton({ Name = "Anti pcld", Callback = HookedPCLDBreak }) AntiTab:CreateSection("Idk") paintPartsBackup = {} paintConnections = {} function deleteAllPaintParts() for _, obj in ipairs(Workspace:GetDescendants()) do if obj:IsA("BasePart") and obj.Name == "PaintPlayerPart" then local clone = obj:Clone() clone.Archivable = true paintPartsBackup[obj:GetDebugId()] = { clone = clone, parent = obj.Parent } obj:Destroy() end end end function restorePaintParts() for _, data in pairs(paintPartsBackup) do if data.clone and data.parent then data.clone.Parent = data.parent end end paintPartsBackup = {} end function watchNewPaintParts() table.insert(paintConnections, Workspace.DescendantAdded:Connect(function(obj) if obj:IsA("BasePart") and obj.Name == "PaintPlayerPart" then task.defer(function() if obj and obj.Parent then local clone = obj:Clone() clone.Archivable = true paintPartsBackup[obj:GetDebugId()] = { clone = clone, parent = obj.Parent } obj:Destroy() end end) end end)) end function disconnectWatchers() for _, conn in ipairs(paintConnections) do if conn.Connected then conn:Disconnect() end end paintConnections = {} end function setTouchQuery(state) local char = Workspace:FindFirstChild(Player.Name) if not char then return end for _, v in ipairs(char:GetChildren()) do if v:IsA("Part") or v:IsA("BasePart") then v.CanTouch = state v.CanQuery = state end end end AntiTab:CreateToggle({ Name = "Anti Paint", CurrentValue = false, Flag = "AntiPaintToggle", Callback = function(state) if state then deleteAllPaintParts() watchNewPaintParts() setTouchQuery(false) else restorePaintParts() disconnectWatchers() setTouchQuery(true) end end }) antiVoidConn = nil VOID_THRESHOLD = - 50 SAFE_HEIGHT = 100 AntiTab:CreateToggle({ Name = "Anti void", CurrentValue = false, Flag = "AntiPaintToggle", Callback = function(on) if on then if antiVoidConn then antiVoidConn:Disconnect() end antiVoidConn = R.Heartbeat:Connect(function() local char = Player.Character if char and char.PrimaryPart then local pos = char.PrimaryPart.Position if pos.Y < VOID_THRESHOLD then local safePos = Vector3.new(pos.X, pos.Y + SAFE_HEIGHT, pos.Z) char:SetPrimaryPartCFrame(CFrame.new(safePos)) char.PrimaryPart.AssemblyLinearVelocity = Vector3.zero end end end) else if antiVoidConn then antiVoidConn:Disconnect() antiVoidConn = nil end end end }) antiExplodeT = false function antiExplodeF() antiExplodeT = true local char = Player.Character if not char then return end local hrp = char:WaitForChild("HumanoidRootPart") workspace.ChildAdded:Connect(function(model) if model.Name == "Part" and antiExplodeT then local mag = (model.Position - hrp.Position).Magnitude if mag <= 20 then hrp.Anchored = true wait(0.001) while char["Right Arm"].RagdollLimbPart.CanCollide do wait(0.0001) end hrp.Anchored = false end end end) end AntiTab:CreateToggle({ Name = "Anti Explosion", CurrentValue = false, Flag = "AntiExToggle", Callback = function(on) if on then antiExplodeF() else antiExplodeT = false end end }) anti_burn_enabled = false function getCharacter(player) return player.Character or player.CharacterAdded:Wait() end function getHRP(character) return character and character:FindFirstChild("HumanoidRootPart") end function spawnOrGetFireExtinguisher(cframe) local toysFolder = workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys") if toysFolder then local tool = toysFolder:FindFirstChild("FireExtinguisher") if tool then return tool end end return game:GetService("ReplicatedStorage") .MenuToys .SpawnToyRemoteFunction :InvokeServer("FireExtinguisher", cframe, Vector3.new()) end function destroyToy(toy) game:GetService("ReplicatedStorage") .MenuToys .DestroyToy :FireServer(toy) end function antiBurnLoop() while anti_burn_enabled do pcall(function() player = game.Players.LocalPlayer character = getCharacter(player) hrp = getHRP(character) if hrp and hrp:FindFirstChild("FireParticleEmitter") then fireExtinguisher = workspace[player.Name .. "SpawnedInToys"]:FindFirstChild("FireExtinguisher") or spawnOrGetFireExtinguisher(hrp.CFrame * CFrame.new(0, 100, 0)) if fireExtinguisher and fireExtinguisher:FindFirstChild("ExtinguishPart") then extinguishPart = fireExtinguisher.ExtinguishPart while hrp:FindFirstChild("FireParticleEmitter") do extinguishPart.Position = hrp.Position extinguishPart.Size = Vector3.new(100, 100, 100) game:GetService("RunService").Heartbeat:Wait() extinguishPart.Position = Vector3.new(- 1000, 0, 0) game:GetService("RunService").Heartbeat:Wait() end destroyToy(fireExtinguisher) task.wait(0.001) end end end) task.wait(0.001) end end AntiTab:CreateToggle({ Name = "Anti Burn", Default = false, Callback = function(Value) anti_burn_enabled = Value if Value then task.spawn(antiBurnLoop) end end }) AntiVoid = AntiTab:CreateToggle({ Name = "Delete void", CurrentValue = false, Flag = "Toggle1", Callback = function(Value) antiboid = Value if Value then workspace.FallenPartsDestroyHeight = 0 / 0 Rayfield:Notify({ Title = "Void has been disabled", Content = "Anti-Void", Duration = 6.5, Image = 4483362458, }) else workspace.FallenPartsDestroyHeight = - 100 Rayfield:Notify({ Title = "Void has been enabled", Content = "Anti-Void", Duration = 6.5, Image = 4483362458, }) end end, }) AntiTab:CreateSection("Anti blob") RunService = game:GetService("RunService") Players = game:GetService("Players") player = Players.LocalPlayer enabled = false hbConn = nil coco = nil holdRemote = nil dropRemote = nil MenuToys = ReplicatedStorage:WaitForChild("MenuToys") DestroyToy = MenuToys:WaitForChild("DestroyToy") function spawnCoconut() local toysFolder = workspace:WaitForChild(player.Name.."SpawnedInToys", 2) if not toysFolder then return false end MenuToys.SpawnToyRemoteFunction:InvokeServer( "FoodCoconut", CFrame.new(-72.93, -5.97, -265.54), Vector3.new(0,90,0) ) coco = toysFolder:WaitForChild("FoodCoconut", 2) if not coco then return false end local holdPart = coco:WaitForChild("HoldPart", 1) if not holdPart then return false end holdRemote = holdPart:FindFirstChild("HoldItemRemoteFunction") dropRemote = holdPart:FindFirstChild("DropItemRemoteFunction") return holdRemote and dropRemote end function destroyCoconut() if coco and coco.Parent then pcall(function() if DestroyToy.FireServer then DestroyToy:FireServer(coco) elseif DestroyToy.InvokeServer then DestroyToy:InvokeServer(coco) end end) end end function startLoop() hbConn = RunService.Heartbeat:Connect(function() if not enabled then return end local character = player.Character local head = character and character:FindFirstChild("Head") if not coco or not coco.Parent then spawnCoconut() return end if not holdRemote or not dropRemote or not head then return end pcall(function() holdRemote:InvokeServer(coco, character) dropRemote:InvokeServer( coco, CFrame.new(head.Position + Vector3.new(0,10,0)), --0,10,10 original Vector3.zero ) end) end) end AntiTab:CreateToggle({ Name = "Input Lag coconut", CurrentValue = false, Callback = function(state) enabled = state if state then startLoop() else if hbConn then hbConn:Disconnect() hbConn = nil end destroyCoconut() coco = nil holdRemote = nil dropRemote = nil end end }) antiblob = false AntiTab:CreateToggle({ Name = "Anti Blob", CurrentValue = false, Flag = "AntiBlobKick", Callback = function(Value) antiblob = Value player = game:GetService("Players").LocalPlayer workspace = game:GetService("Workspace") if antiblob then if player.Character then if not player.Character:FindFirstChild("TruePositionPart") then truePosPart = Instance.new("Part") truePosPart.Parent = player.Character truePosPart.Name = "TruePositionPart" truePosPart.Anchored = true truePosPart.Transparency = 1 truePosPart.CanCollide = false truePosPart.Size = Vector3.new(0.1, 0.1, 0.1) truePosPart.CFrame = CFrame.new(0, - 10000, 0) end end end while antiblob and task.wait() do if player.Character then hrp = player.Character:FindFirstChild("HumanoidRootPart") truePosPart = player.Character:FindFirstChild("TruePositionPart") if hrp and truePosPart then rootAttachment = hrp:FindFirstChild("RootAttachment") if rootAttachment and rootAttachment.Parent == hrp then rootAttachment.Parent = truePosPart print("Anti-Blob (tf happened here?) TruePositionPart") end for _, part in pairs(player.Character:GetChildren()) do if part:IsA("Part") and part.Massless then part.Massless = false function kickFromBlob() for _, plot in pairs(workspace.PlotItems:GetChildren()) do if plot.Name ~= "PlayersInPlots" then for _, item in pairs(plot:GetChildren()) do if item.Name == "CreatureBlobman" then blobScript = item:FindFirstChild("BlobmanSeatAndOwnerScript") rightDetector = item:FindFirstChild("RightDetector") leftDetector = item:FindFirstChild("LeftDetector") if blobScript and rightDetector and leftDetector then dropEvent = blobScript:FindFirstChild("CreatureDrop") rightWeld = rightDetector:FindFirstChild("RightWeld") leftWeld = leftDetector:FindFirstChild("LeftWeld") if dropEvent and rightWeld and hrp then dropEvent:FireServer(rightWeld, hrp) end if dropEvent and leftWeld and hrp then dropEvent:FireServer(leftWeld, hrp) end if replicatedStorage:FindFirstChild("CharacterEvents") then struggleEvent = replicatedStorage.CharacterEvents:FindFirstChild("Struggle") if struggleEvent then struggleEvent:FireServer(player) end end end end end end end for _, plr in pairs(game:GetService("Players"):GetPlayers()) do toyFolder = workspace:FindFirstChild(plr.Name .. "SpawnedInToys") if toyFolder then for _, item in pairs(toyFolder:GetChildren()) do if item.Name == "CreatureBlobman" then blobScript = item:FindFirstChild("BlobmanSeatAndOwnerScript") rightDetector = item:FindFirstChild("RightDetector") leftDetector = item:FindFirstChild("LeftDetector") if blobScript and rightDetector and leftDetector then dropEvent = blobScript:FindFirstChild("CreatureDrop") rightWeld = rightDetector:FindFirstChild("RightWeld") leftWeld = leftDetector:FindFirstChild("LeftWeld") if dropEvent and rightWeld and hrp then dropEvent:FireServer(rightWeld, hrp) end if dropEvent and leftWeld and hrp then dropEvent:FireServer(leftWeld, hrp) end if replicatedStorage:FindFirstChild("CharacterEvents") then struggleEvent = replicatedStorage.CharacterEvents:FindFirstChild("Struggle") if struggleEvent then struggleEvent:FireServer(player) end end end end end end end end kickFromBlob() end end end end end if not antiblob and player.Character then hrp = player.Character:FindFirstChild("HumanoidRootPart") truePosPart = player.Character:FindFirstChild("TruePositionPart") if hrp and truePosPart then rootAttachment = truePosPart:FindFirstChild("RootAttachment") if rootAttachment then rootAttachment.Parent = hrp print("what even happened here") end truePosPart:Destroy() end end end, }) players = game:GetService("Players") runService = game:GetService("RunService") localPlayer = game.Players.LocalPlayer workspace = game:GetService("Workspace") antiBlobmanEnabled = false antiBlobmanGrabEnabled = false antiBlobmanConnection = nil function getCharacter(player) char = player.Character if not char then if player.CharacterAdded then char = player.CharacterAdded:Wait() or nil else char = nil end end return char end function getHumanoidRootPart(character) return character:FindFirstChild("HumanoidRootPart") or nil end function getHumanoid(character) return character:FindFirstChild("Humanoid") or nil end function getDistance(part1, part2) return (part1.Position - part2.Position).Magnitude end function getAllToys(includePlots) allToys = {} playersList = players:GetPlayers() for _, player in ipairs(playersList) do toyFolder = workspace[player.Name .. "SpawnedInToys"] for _, toy in pairs(toyFolder:GetChildren()) do if toy:IsA("Model") then table.insert(allToys, toy) end end end if includePlots then for i = 1, 5 do for _, item in pairs(workspace.PlotItems["Plot" .. i]:GetChildren()) do if item:IsA("Model") then table.insert(allToys, item) end end end end return allToys end function spawnToy(toyName, cframe) if localPlayer.CanSpawnToy then task.spawn(function() toySpawn = replicatedStorage:WaitForChild("MenuToys"):WaitForChild("SpawnToyRemoteFunction") toySpawn:InvokeServer(toyName, cframe * CFrame.new(0, 10, 20), Vector3.new(0, 0, 0)) repeat task.wait() until myToysFolder:FindFirstChild(toyName) task.wait(0.01) return myToysFolder:FindFirstChild(toyName) end) end end function destroyToy(toy) task.spawn(function() success, err = pcall(function() toyDestroy = replicatedStorage:WaitForChild("MenuToys"):WaitForChild("DestroyToy") toyDestroy:FireServer(toy) end) if not success then warn("Error: " .. err) end end) end function setNetworkOwner(part, cframe) task.spawn(function() setNetworkOwnerRemote = replicatedStorage:WaitForChild("GrabEvents"):WaitForChild("SetNetworkOwner") setNetworkOwnerRemote:FireServer(part, cframe) end) end function toggleConstraint(constraint, enabled) if constraint then if constraint.Name ~= "LeftWeld" then if constraint.Name ~= "LeftAlignOrientation" then if constraint.Name ~= "RightWeld" then if constraint.Name == "RightAlignOrientation" and (constraint and constraint.Parent.Parent.Parent ~= myToysFolder) then constraint.Enabled = enabled end elseif constraint and constraint.Parent.Parent.Parent ~= myToysFolder then constraint.Enabled = enabled end elseif constraint and constraint.Parent.Parent.Parent ~= myToysFolder then constraint.Enabled = enabled end elseif constraint and constraint.Parent.Parent.Parent ~= myToysFolder then constraint.Enabled = enabled end end end function updateAntiBlobman() pcall(function() if antiBlobmanConnection then antiBlobmanConnection:Disconnect() end end) allToys = getAllToys(true) if antiBlobmanEnabled then for _, toy in pairs(allToys) do if toy.Name == "CreatureBlobman" then leftDetector = toy:FindFirstChild("LeftDetector") rightDetector = toy:FindFirstChild("RightDetector") leftWeld = leftDetector and leftDetector:FindFirstChild("LeftWeld") leftAlign = leftDetector and leftDetector:FindFirstChild("LeftAlignOrientation") rightWeld = rightDetector and rightDetector:FindFirstChild("RightWeld") rightAlign = rightDetector and rightDetector:FindFirstChild("RightAlignOrientation") toggleConstraint(leftWeld, false) toggleConstraint(leftAlign, false) toggleConstraint(rightWeld, false) toggleConstraint(rightAlign, false) end end antiBlobmanConnection = workspace.DescendantAdded:Connect(function(descendant) toggleConstraint(descendant, false) end) else for _, toy in pairs(allToys) do if toy.Name == "CreatureBlobman" then leftDetector = toy:FindFirstChild("LeftDetector") rightDetector = toy:FindFirstChild("RightDetector") leftWeld = leftDetector and leftDetector:FindFirstChild("LeftWeld") leftAlign = leftDetector and leftDetector:FindFirstChild("LeftAlignOrientation") rightWeld = rightDetector and rightDetector:FindFirstChild("RightWeld") rightAlign = rightDetector and rightDetector:FindFirstChild("RightAlignOrientation") toggleConstraint(leftWeld, true) toggleConstraint(leftAlign, true) toggleConstraint(rightWeld, true) toggleConstraint(rightAlign, true) end end end end function ragdollFall() rootPart = getHumanoidRootPart(getCharacter(localPlayer)) if rootPart then ragdollRemote = replicatedStorage:WaitForChild("CharacterEvents"):WaitForChild("RagdollRemote") ragdollRemote:FireServer(rootPart, 1) end end AntiTab:CreateToggle({ Name = "Anti blobman aura grab", Default = false, Color = Color3.fromRGB(102, 0, 102), Flag = "antiblobmanaura_toggle", Callback = function(enabled) antiBlobmanGrabEnabled = enabled while antiBlobmanGrabEnabled do for _, player in pairs(players:GetPlayers()) do if player and getCharacter(player) then playerCharacter = getCharacter(player) playerRootPart = nil if playerCharacter then playerRootPart = getHumanoidRootPart(playerCharacter) end playerHumanoid = nil if playerCharacter then playerHumanoid = getHumanoid(playerCharacter) end myCharacter = getCharacter(localPlayer) myRootPart = nil if myCharacter then myRootPart = getHumanoidRootPart(myCharacter) end if player.Name ~= localPlayer.Name and (playerRootPart and (myRootPart and (playerHumanoid and (playerHumanoid.SeatPart and (playerHumanoid.SeatPart.Parent and (playerHumanoid.SeatPart.Parent.Name == "CreatureBlobman" and getDistance(playerRootPart, myRootPart) <= 19)))))) then setNetworkOwner(playerRootPart, playerRootPart.CFrame) task.wait(0.01) end end end task.wait(0.01) end end }) AntiTab:CreateSection("Anti lag") local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer local ExtendGrabLine = ReplicatedStorage :WaitForChild("GrabEvents") :WaitForChild("ExtendGrabLine") local KB_THRESHOLD = 5 local BYTE_THRESHOLD = KB_THRESHOLD * 1024 local COOLDOWN = 30 local lastNotify = 0 local connection = nil local function notify(text) Rayfield:Notify({ Title = "Sussy packet detected", Content = text, Duration = 7, Image = 4483362458 }) end local function resolveSender(args) for _, v in ipairs(args) do if typeof(v) == "Instance" and v:IsA("Player") then return v end if typeof(v) == "Instance" and v:IsA("Model") then local plr = Players:GetPlayerFromCharacter(v) if plr then return plr end end if typeof(v) == "Instance" and v:IsA("BasePart") then local model = v:FindFirstAncestorOfClass("Model") if model then local plr = Players:GetPlayerFromCharacter(model) if plr then return plr end end end if typeof(v) == "Instance" and v:IsA("Tool") then local model = v:FindFirstAncestorOfClass("Model") if model then local plr = Players:GetPlayerFromCharacter(model) if plr then return plr end end end end return LocalPlayer end local function shortenString(str) if #str <= 80 then return str end return str:sub(1, 80) .. "... (+" .. (#str - 80) .. " chars)" end local function summarizeTable(tbl) local preview = {} local count = 0 for _, v in pairs(tbl) do count += 1 if count <= 5 then table.insert(preview, tostring(v)) end end return "table["..count.."] { "..table.concat(preview, ", ").." ... }" end local function compressArgs(args) local seen = {} local summary = {} for _, v in ipairs(args) do local key if typeof(v) == "string" then key = "str:"..shortenString(v) elseif typeof(v) == "Instance" then key = "inst:"..v.ClassName.."("..v.Name..")" elseif typeof(v) == "table" then key = "tbl:"..summarizeTable(v) else key = typeof(v)..":"..tostring(v) end seen[key] = (seen[key] or 0) + 1 end for k, count in pairs(seen) do if count > 1 then table.insert(summary, k.." x"..count) else table.insert(summary, k) end end return summary end local function startDetector() if connection then return end connection = ExtendGrabLine.OnClientEvent:Connect(function(...) local args = { ... } local totalBytes = 0 for _, v in ipairs(args) do if typeof(v) == "string" then totalBytes += #v end end if totalBytes < BYTE_THRESHOLD then return end if tick() - lastNotify < COOLDOWN then return end lastNotify = tick() local sender = resolveSender(args) local senderName = sender.DisplayName local mbSize = totalBytes / (1024 * 1024) local summarized = compressArgs(args) notify(string.format( "Sender: %s\nSize: %.3f MB\nArgs:\n%s", senderName, mbSize, table.concat(summarized, "\n") )) end) end local function stopDetector() if connection then connection:Disconnect() connection = nil end end AntiTab:CreateToggle({ Name = "Detect packets", CurrentValue = false, Flag = "GrabRemoteDetector", Callback = function(Value) if Value then startDetector() Rayfield:Notify({ Title = "Enabled", Content = "WHY AM I LAGGING", Duration = 5 }) else stopDetector() Rayfield:Notify({ Title = "Disabled", Content = "ok", Duration = 5 }) end end }) antilaggg = false antilagggauto = false AntiTab:CreateToggle({ Name = "Anti Lag", CurrentValue = false, Flag = "AntiLag", Callback = function(p1191) antilaggg = p1191 game:GetService("Players").LocalPlayer.PlayerScripts.CharacterAndBeamMove.Disabled = p1191 end }) AntiTab:CreateToggle({ Name = "Auto anti lag", CurrentValue = false, Flag = "AntiLag(Auto)", Callback = function(p1193) antilagggauto = p1193 end }) grabpersec = 0 GrabEvents = ReplicatedStorage:FindFirstChild("GrabEvents") GrabRemote = GrabEvents and GrabEvents:FindFirstChild("Grab") DestroyGrabLineRemote = GrabEvents and GrabEvents:FindFirstChild("DestroyGrabLine") SetNetworkOwnerRemote = GrabEvents and GrabEvents:FindFirstChild("SetNetworkOwner") SpawnToyRemote = GrabEvents and GrabEvents:FindFirstChild("SpawnToy") DestroyToyRemote = GrabEvents and GrabEvents:FindFirstChild("DestroyToy") RagdollRemote = ReplicatedStorage:FindFirstChild("CharacterEvents") and ReplicatedStorage.CharacterEvents:FindFirstChild("Ragdoll") StruggleRemote = ReplicatedStorage:FindFirstChild("CharacterEvents") and ReplicatedStorage.CharacterEvents:FindFirstChild("Struggle") game:GetService("Workspace").DescendantAdded:Connect(function(descendant) if descendant:IsA("Model") and descendant.Name == "GrabParts" then grabpersec = grabpersec + 1 end if grabpersec <= 25 or (not antilagggauto or antilaggg) then task.delay(1, function() if grabpersec ~= 0 then grabpersec = grabpersec - 1 end end) else grabpersec = 0 game:GetService("Players").LocalPlayer.PlayerScripts.CharacterAndBeamMove.Disabled = true print("Anti Lag is Enabled") if antilagggauto then originalBeamState = game:GetService("Players").LocalPlayer.PlayerScripts.CharacterAndBeamMove.Disabled task.delay(60, function() if not antilaggg then game:GetService("Players").LocalPlayer.PlayerScripts.CharacterAndBeamMove.Disabled = false print("Anti Lag is Disabled") end end) end end end) function antiLagSpamCleanup() if antilaggg or antilagggauto then for _, part in ipairs(workspace:GetDescendants()) do if part:IsA("Model") and part.Name == "GrabParts" then pcall(function() if DestroyGrabLineRemote then for i = 1, 5 do DestroyGrabLineRemote:FireServer(part) end end end) end end end end if antilagggauto then while task.wait(10) do if antilagggauto then antiLagSpamCleanup() else break end end end AntiTab:CreateSection("Anti Kick's") AntiKickToggle = AntiTab:CreateToggle({ Name = "Anti Kick ", CurrentValue = false, Flag = "AntiKickToggle", Callback = function(Value) getgenv().AntiKickEnabled = Value if Value then task.spawn(function() local plr = game.Players.LocalPlayer local inv = workspace[plr.Name .. "SpawnedInToys"] local hrp local setOwner = game.ReplicatedStorage:WaitForChild("GrabEvents"):WaitForChild("SetNetworkOwner") local stickyEvent = game.ReplicatedStorage:WaitForChild("PlayerEvents"):WaitForChild("StickyPartEvent") local destroyrem = game.ReplicatedStorage:WaitForChild("MenuToys"):WaitForChild("DestroyToy") local canSpawn = plr:WaitForChild("CanSpawnToy") local function getHRP() if plr.Character and plr.Character:FindFirstChild("HumanoidRootPart") then return plr.Character.HumanoidRootPart else local character = plr.CharacterAdded:Wait() return character:WaitForChild("HumanoidRootPart") end end function CheckForHome() local ToyFolder if not workspace.PlotItems.PlayersInPlots:FindFirstChild(plr.Name) then return false end for _, v in pairs(workspace.Plots:GetChildren()) do for _, b in pairs(v.PlotSign.ThisPlotsOwners:GetChildren()) do if b.Value == plr.Name then ToyFolder = workspace.PlotItems[v.Name] end end end if ToyFolder then return true, ToyFolder else return false end end local function StickKunai(kunai) if not kunai or not kunai:FindFirstChild("StickyPart") then return end local currentHRP = getHRP() if kunai:FindFirstChild("SoundPart") then if not kunai["SoundPart"]:FindFirstChild("PartOwner") or kunai["SoundPart"].PartOwner.Value ~= plr.Name then setOwner:FireServer(kunai.SoundPart, kunai.SoundPart.CFrame) end end stickyEvent:FireServer( kunai.StickyPart, currentHRP:FindFirstChild("FirePlayerPart") or currentHRP:WaitForChild("FirePlayerPart"), CFrame.new(0, 0, 0) * CFrame.Angles(0, math.rad(90), math.rad(90))) for _, obj in pairs(kunai:GetChildren()) do if obj.Name == "Pyramid" then obj.CanTouch = false obj.CanCollide = false obj.CanQuery = false obj.Transparency = 0 local high = Instance.new("Highlight") high.FillColor = Color3.fromRGB(0, 0, 0) high.Parent = obj elseif obj.Name == "Main" then obj.CanTouch = false obj.CanCollide = false obj.CanQuery = false obj.Transparency = 0 local high = Instance.new("Highlight") high.FillColor = Color3.fromRGB(255, 255, 255) high.Parent = obj elseif obj:IsA("BasePart") then obj.CanTouch = false obj.CanCollide = false obj.CanQuery = false obj.Transparency = 1 end end end local function ClearKunai() for _, v in pairs(inv:GetChildren()) do if v.Name == "AntiKick" then destroyrem:FireServer(v) end end end local function SpawnToy(name) while not canSpawn.Value do canSpawn.Changed:Wait() end local currentHRP = getHRP() task.spawn(function() game.ReplicatedStorage.MenuToys.SpawnToyRemoteFunction:InvokeServer( name, currentHRP.CFrame * CFrame.new(0, 12, 20), Vector3.new(0, 0, 0)) end) local boolik, house = CheckForHome() if boolik then return house:WaitForChild(name, 2) elseif not workspace.PlotItems.PlayersInPlots:FindFirstChild(plr.Name) then return inv:WaitForChild(name, 2) elseif workspace.PlotItems.PlayersInPlots:FindFirstChild(plr.Name) and not boolik then return nil end end while getgenv().AntiKickEnabled do task.wait(0.005) if not plr.Character or not plr.Character:FindFirstChild("Humanoid") or plr.Character.Humanoid.Health <= 0 then continue end local kunai = inv:FindFirstChild("NinjaShuriken") if workspace.PlotItems.PlayersInPlots:FindFirstChild(plr.Name) then local boolik, house = CheckForHome() if boolik and house and workspace.Plots:FindFirstChild(house.Name) and workspace.Plots:FindFirstChild(house.Name)["PlotSign"]["ThisPlotsOwners"]:FindFirstChild("Value") and workspace.Plots:FindFirstChild(house.Name)["PlotSign"]["ThisPlotsOwners"]["Value"]["TimeRemainingNum"].Value > 89 then kunai = SpawnToy("NinjaShuriken") if kunai == nil then continue end kunai.Name = "AntiKick" StickKunai(kunai) end end if not kunai then if workspace.PlotItems.PlayersInPlots:FindFirstChild(plr.Name) then continue end kunai = SpawnToy("NinjaShuriken") if kunai == nil then continue end kunai.Name = "AntiKick" if not kunai then continue end end repeat if kunai and kunai:FindFirstChild("StickyPart") and kunai.StickyPart.CanTouch == true then StickKunai(kunai) kunai.Name = "AntiKick" end wait(0.3) until not kunai or not getgenv().AntiKickEnabled or not kunai:FindFirstChild("StickyPart") or kunai.StickyPart.CanTouch == false or not plr.Character or not plr.Character:FindFirstChild("HumanoidRootPart") or not kunai:FindFirstChild("StickyPart") or (plr.Character.HumanoidRootPart.Position - kunai.StickyPart.Position).Magnitude >= 20 if not kunai or not kunai:FindFirstChild("StickyPart") or not plr.Character or not plr.Character:FindFirstChild("HumanoidRootPart") or (plr.Character.HumanoidRootPart.Position - kunai.StickyPart.Position).Magnitude >= 20 then ClearKunai() end pcall(function() repeat wait(0.05) until not getgenv().AntiKickEnabled or not plr.Character or not plr.Character:FindFirstChild("Humanoid") or not kunai or not kunai:FindFirstChild("StickyPart") or not kunai.StickyPart:FindFirstChild("StickyWeld") or not kunai.StickyPart.StickyWeld.Part1 if not kunai or not kunai:FindFirstChild("StickyPart") or (plr.Character and plr.Character:FindFirstChild("Humanoid") and plr.Character.Humanoid.Health <= 0) or not kunai["StickyPart"]:FindFirstChild("StickyWeld").Part1 then ClearKunai() end end) end end) end end, }) COCK = false Penis = AntiTab:CreateToggle({ Name = "Pencil Anti-Kick", CurrentValue = false, Flag = "Toggle1", Callback = function(Value) COCK = Value while COCK do while not game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys"):FindFirstChild("ToolPencil") do if game.Players.LocalPlayer.Character then if game.Players.LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then game.ReplicatedStorage.MenuToys.SpawnToyRemoteFunction:InvokeServer("ToolPencil", CFrame.new(game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame.Position) + Vector3.new(0, 0, 15), Vector3.new(0, 0, 0)) end end task.wait() end if game.Players.LocalPlayer.Character then if game.Players.LocalPlayer.Character:FindFirstChild("Torso") and game.Players.LocalPlayer.Character:FindFirstChild("HumanoidRootPart") and game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys"):FindFirstChild("ToolPencil") then if game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil:FindFirstChild("StickyPart") then if game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.StickyPart:FindFirstChild("StickyWeld") then if game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.StickyPart.StickyWeld.Part1 ~= game.Players.LocalPlayer.Character.Torso then local a = game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.SoundPart.CFrame.Position local b = game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame.Position local distance = Vector3.new((a.X - b.X) ^ 2, (a.Y - b.Y) ^ 2, (a.Z - b.Z) ^ 2) if math.sqrt(distance.X + distance.Y + distance.Z) > 20 then game.ReplicatedStorage.MenuToys.DestroyToy:FireServer(game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil) else game.ReplicatedStorage.PlayerEvents.StickyPartEvent:FireServer(game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.StickyPart, game.Players.LocalPlayer.Character.Torso, CFrame.new(0, - 1, 0) * CFrame.Angles(0, math.pi, 0)) for _, prt in pairs(game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil:GetChildren()) do if prt.ClassName == "Part" then prt.CanQuery = false end end task.wait(0.2) if game.Players.LocalPlayer.Character then if game.Players.LocalPlayer.Character:FindFirstChild("Torso") and game.Players.LocalPlayer.Character:FindFirstChild("HumanoidRootPart") and game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys"):FindFirstChild("ToolPencil") then if game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil:FindFirstChild("StickyPart") then if game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.StickyPart:FindFirstChild("StickyWeld") then if game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.StickyPart.StickyWeld.Part1 ~= game.Players.LocalPlayer.Character.Torso then if game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil then if game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.StickyPart.StickyWeld.Part1 ~= game.Players.LocalPlayer.Character.Torso then game.ReplicatedStorage.GrabEvents.SetNetworkOwner:FireServer(game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.SoundPart, game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.SoundPart.CFrame) end end end end end end end end end end end end end task.wait() end end, }) AntiTab:CreateSection("Anti grab") antiTpActive = false local tpThreshold = 10 local lastPosition local INSTANT_CFRAME function safeNotify(args) pcall(function() Rayfield:Notify(args) end) end function getPlotInfo(plot) local sign = plot:FindFirstChild("PlotSign") local ownersFolder = sign and sign:FindFirstChild("ThisPlotsOwners") local valueObj = ownersFolder and ownersFolder:FindFirstChild("Value") local grabPart = plot:FindFirstChild("PlusGrabPart", true) return valueObj, grabPart end function ultraFastClaimPlot() local char = LocalPlayer.Character local root = char and char:FindFirstChild("HumanoidRootPart") if not (char and root) then return false end local plots = Workspace:FindFirstChild("Plots") if not plots then return false end for i = 1, 10 do local p = plots:FindFirstChild("Plot" .. i) if p then local owner, grab = getPlotInfo(p) if owner and owner.Value == LocalPlayer.Name and grab then root.CFrame = grab.CFrame root.AssemblyLinearVelocity = Vector3.zero root.AssemblyAngularVelocity = Vector3.zero return true end end end for i = 1, 10 do local p = plots:FindFirstChild("Plot" .. i) if p then local owner, grab = getPlotInfo(p) if (not owner or owner.Value == "") and grab then root.CFrame = grab.CFrame root.AssemblyLinearVelocity = Vector3.zero root.AssemblyAngularVelocity = Vector3.zero task.defer(function() local tries = 0 repeat tries += 1 pcall(function() ReplicatedStorage.GrabEvents.SetNetworkOwner:FireServer(grab, grab.CFrame) end) task.wait(0.001) owner = select(1, getPlotInfo(p)) until (owner and owner.Value == LocalPlayer.Name) or tries >= 5 end) return true end end end return false end function ULTRA_INSTANT_TELEPORT(root) if INSTANT_CFRAME then root.CFrame = INSTANT_CFRAME root.AssemblyLinearVelocity = Vector3.zero root.AssemblyAngularVelocity = Vector3.zero return true end return ultraFastClaimPlot() end AntiTab:CreateToggle({ Name = "Tp to house if getting loopkill", CurrentValue = false, Callback = function(Value) antiTpActive = Value if Value then task.spawn(function() local lastPos = nil local isHandling = false while antiTpActive do if not isHandling then local char = LocalPlayer.Character local root = char and char:FindFirstChild("HumanoidRootPart") if root then local currentPos = root.Position if lastPos then local distance = (currentPos - lastPos).Magnitude if distance > tpThreshold then isHandling = true ULTRA_INSTANT_TELEPORT(root) task.wait(0.05) isHandling = false end end lastPos = root.Position else lastPos = nil end end task.wait(0) end end) else end end }) AntiTab:CreateSlider({ Name = "Sensibility", Range = { 1, 1000 }, Increment = 5, CurrentValue = tpThreshold, Callback = function(Value) tpThreshold = Value end }) AntiTab:CreateToggle({ Name = "Anti Loop", CurrentValue = false, Flag = "AntiLoopToggle", Callback = function(Value) if Value then getgenv().teleportLocations = { Vector3.new(518.52, 834.62, - 362.38), Vector3.new(566.16, 124.33, - 93.13), Vector3.new(80.63, 346.19, 338.40), Vector3.new(288.70, 447.54, 481.17), Vector3.new(- 331.23, 81.64, 340.15), Vector3.new(- 566.02, - 6.35, 84.20), Vector3.new(- 514.05, - 6.35, - 160.63), Vector3.new(- 215.14, 60.76, - 304.82), Vector3.new(- 338.28, 22.11, 484.03) } getgenv().ultraFastLoopTP = function() while getgenv().AntiLoopEnabled do local char = player.Character or player.CharacterAdded:Wait() local hrp = char:WaitForChild("HumanoidRootPart") for _, location in ipairs(getgenv().teleportLocations) do if hrp and getgenv().AntiLoopEnabled then hrp.CFrame = CFrame.new(location) end task.wait(0.08) end end end getgenv().AntiLoopEnabled = true task.spawn(getgenv().ultraFastLoopTP) player.CharacterAdded:Connect(function() task.wait(0.08) if getgenv().AntiLoopEnabled then task.spawn(getgenv().ultraFastLoopTP) end end) else getgenv().AntiLoopEnabled = false end end }) local Players = game:GetService("Players") local Remotes = {} for _, Remote in ReplicatedStorage:GetDescendants() do if Remote.ClassName:find("Remote") then Remotes[Remote.Name] = Remote end end local LocalPlayer = Players.LocalPlayer local IsHeld = LocalPlayer:WaitForChild("IsHeld") local Character = nil local Root = nil local Humanoid = nil local Head = nil local AntiGrabEnabled = false local HeldConnection = nil local SitThread = nil ---------------------------------------------------- -- Character Handling ---------------------------------------------------- local function GetLimbs(Char) if not Char then return {} end local Limbs = {} for _, Name in pairs({"Right Arm", "Left Arm", "Right Leg", "Left Leg"}) do Limbs[Name] = Char:FindFirstChild(Name) end return Limbs end local function GetRagdollLimbs(Char) if not Char then return {} end local RagdollLimbs = {} for _, Limb in pairs(GetLimbs(Char)) do if Limb then local RagdollLimb = Limb:FindFirstChild("RagdollLimbPart") if RagdollLimb then local Socket = RagdollLimb:FindFirstChildWhichIsA("BallSocketConstraint") if Socket then RagdollLimbs[RagdollLimb] = Socket end end end end return RagdollLimbs end local function UpdateCharacter(NewCharacterModel) if not (NewCharacterModel and NewCharacterModel:IsDescendantOf(workspace)) then return end Character = NewCharacterModel Root = NewCharacterModel:WaitForChild("HumanoidRootPart", 5) Humanoid = NewCharacterModel:WaitForChild("Humanoid", 5) Head = NewCharacterModel:WaitForChild("Head", 5) end UpdateCharacter(LocalPlayer.Character) LocalPlayer.CharacterAdded:Connect(UpdateCharacter) ---------------------------------------------------- -- SIT SYSTEM (NEW) ---------------------------------------------------- local function ForceSit() if SitThread then task.cancel(SitThread) SitThread = nil end SitThread = task.spawn(function() while AntiGrabEnabled and IsHeld.Value do pcall(function() if Humanoid and Root then Humanoid.Sit = true Humanoid:ChangeState(Enum.HumanoidStateType.Seated) -- disable auto stand states Humanoid:SetStateEnabled(Enum.HumanoidStateType.GettingUp, false) Humanoid:SetStateEnabled(Enum.HumanoidStateType.Running, false) Humanoid:SetStateEnabled(Enum.HumanoidStateType.RunningNoPhysics, false) Humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false) -- kill velocities Root.AssemblyLinearVelocity = Vector3.zero Root.AssemblyAngularVelocity = Vector3.zero end end) task.wait(0.1) end -- restore after release if Humanoid then Humanoid:SetStateEnabled(Enum.HumanoidStateType.GettingUp, true) Humanoid:SetStateEnabled(Enum.HumanoidStateType.Running, true) Humanoid:SetStateEnabled(Enum.HumanoidStateType.RunningNoPhysics, true) Humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, true) Humanoid.Sit = false end end) end ---------------------------------------------------- -- ANTIGRAB ---------------------------------------------------- local function StartAntiGrab() if HeldConnection then HeldConnection:Disconnect() HeldConnection = nil end HeldConnection = IsHeld:GetPropertyChangedSignal("Value"):Connect(function() if not AntiGrabEnabled or not IsHeld.Value then return end -- NEW (important) ForceSit() local RagdollLimbs = GetRagdollLimbs(Character) -- server struggle spam task.spawn(function() while AntiGrabEnabled and IsHeld.Value do pcall(function() Remotes.Struggle:FireServer() Remotes.RagdollRemote:FireServer(Root, 0) end) task.wait() end end) -- physics break loop task.spawn(function() while AntiGrabEnabled and IsHeld.Value do if Humanoid and Root then pcall(function() Humanoid:ChangeState(Enum.HumanoidStateType.Physics) Root.Anchored = true Root.AssemblyLinearVelocity = Vector3.zero Root.AssemblyAngularVelocity = Vector3.zero end) end task.wait() end if Root then Root.Anchored = false end end) -- ragdoll limb override task.spawn(function() while AntiGrabEnabled and Root and Root.Anchored do pcall(function() if Head then Head.CanCollide = false Head.AssemblyLinearVelocity = Vector3.zero Head.AssemblyAngularVelocity = Vector3.zero end for RagdollLimb, Socket in pairs(RagdollLimbs) do if RagdollLimb and Socket and Root then Socket.Enabled = false RagdollLimb.CFrame = Root.CFrame RagdollLimb.CanCollide = false RagdollLimb.AssemblyLinearVelocity = Vector3.zero RagdollLimb.AssemblyAngularVelocity = Vector3.zero end end end) task.wait() end end) end) end local function StopAntiGrab() AntiGrabEnabled = false if HeldConnection then HeldConnection:Disconnect() HeldConnection = nil end if SitThread then task.cancel(SitThread) SitThread = nil end if Root then Root.Anchored = false end if Humanoid then Humanoid.Sit = false Humanoid:SetStateEnabled(Enum.HumanoidStateType.GettingUp, true) Humanoid:SetStateEnabled(Enum.HumanoidStateType.Running, true) Humanoid:SetStateEnabled(Enum.HumanoidStateType.RunningNoPhysics, true) Humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, true) end end ---------------------------------------------------- -- TOGGLE ---------------------------------------------------- AntiTab:CreateToggle({ Name = "Anti Grab", CurrentValue = false, Callback = function(Value) AntiGrabEnabled = Value if Value then StartAntiGrab() else StopAntiGrab() end end }) tpland = { Spawn = Vector3.new(0, - 7.35, 0), SpawnCave = Vector3.new(- 90, 14.6, - 314.3), GreenHouse = Vector3.new(- 538, - 7, 74), PinkHouse = Vector3.new(- 478, - 7, - 147), Barn = Vector3.new(- 228, 82, - 318), BlueHouse = Vector3.new(496, 83, - 350), ChineseHouse = Vector3.new(542, 123, - 93), PurpleHouse = Vector3.new(270, - 7, 448), Factory = Vector3.new(134, 347, 352), OtherGreenHouse = Vector3.new(- 359, 98, 357), BigCave = Vector3.new(- 245, 80, 485), GoodPrison = Vector3.new(569.6, - 7, 176.3), RuhubsDogAhhPrison = Vector3.new(564, 82.5, 210), ExtremelyGoodPrison = Vector3.new(525, 76, 56), TrainCave = Vector3.new(536.6, 87.5, - 169.5), IslanCave = Vector3.new(75.8, 323, 368.5), ChineseRoof = Vector3.new(592, 153, - 100), UfoCave = Vector3.new(29.6, 10.5, - 225.8), Prison = Vector3.new(195, - 7, - 561), BlueHouseSlot = Vector3.new(562.2, 85.38, - 212.56), SpawnSlot = Vector3.new(51.75, - 5.3, - 121.64), HauntedSlot = Vector3.new(164.57, - 5.43, 530.97), RandomSlot = Vector3.new(- 211.65, 85.7, 426.72), BeachSlot = Vector3.new(- 546.97, - 5.3, - 41.09) } SL = tpland["Spawn"] antiok = true lastSafePosition = nil teleportDetected = false lastCheckTime = tick() positionHistory = {} maxHistory = 10 isHeldSpamDetected = false heldChangeTimes = {} heldSpamThreshold = 8 lastHeldValue = false struggling = false lastStruggleTime = 0 struggleCooldown = 0.5 AS = AntiTab:CreateToggle({ Name = "Anti setown kick", Default = true, Callback = function(Value) antiok = Value if Value then task.spawn(function() if game.Players.LocalPlayer.Character and game.Players.LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then lastSafePosition = game.Players.LocalPlayer.Character.HumanoidRootPart.Position for i = 1, maxHistory do table.insert(positionHistory, lastSafePosition) end end if game.Players.LocalPlayer:FindFirstChild("IsHeld") then lastHeldValue = game.Players.LocalPlayer.IsHeld.Value end while antiok and task.wait(0.05) do char = game.Players.LocalPlayer.Character if not char then continue end hrp = char:FindFirstChild("HumanoidRootPart") if not hrp then continue end currentPos = hrp.Position currentTime = tick() isHeld = false if game.Players.LocalPlayer:FindFirstChild("IsHeld") then isHeld = game.Players.LocalPlayer.IsHeld.Value if isHeld ~= lastHeldValue then table.insert(heldChangeTimes, currentTime) lastHeldValue = isHeld for i = # heldChangeTimes, 1, - 1 do if currentTime - heldChangeTimes[i] > 2 then table.remove(heldChangeTimes, i) end end if # heldChangeTimes >= heldSpamThreshold then isHeldSpamDetected = true end end end if isHeld and not struggling and (currentTime - lastStruggleTime > struggleCooldown) then struggling = true lastStruggleTime = currentTime task.spawn(function() for i = 1, 5 do pcall(function() game:GetService("ReplicatedStorage").CharacterEvents.Struggle:FireServer(game.Players.LocalPlayer) end) task.wait(0.05) end struggling = false end) end table.insert(positionHistory, 1, currentPos) if # positionHistory > maxHistory then table.remove(positionHistory, maxHistory + 1) end avgDistance = 0 if # positionHistory >= 2 then for i = 2, # positionHistory do avgDistance = avgDistance + (positionHistory[i - 1] - positionHistory[i]).Magnitude end avgDistance = avgDistance / (# positionHistory - 1) end velocity = hrp.AssemblyLinearVelocity.Magnitude movedDistance = (currentPos - lastSafePosition).Magnitude abnormalTeleport = false if isHeldSpamDetected then abnormalTeleport = true elseif currentPos.Magnitude > 1000000 then abnormalTeleport = true teleportDetected = true elseif movedDistance > 100 and velocity < 50 and avgDistance < 10 then abnormalTeleport = true teleportDetected = true elseif currentPos.Y > 10000 or currentPos.Y < - 1000 then abnormalTeleport = true teleportDetected = true elseif velocity > 500 then abnormalTeleport = true teleportDetected = true end if abnormalTeleport then isHeldSpamDetected = false heldChangeTimes = {} hrp.AssemblyLinearVelocity = Vector3.zero hrp.AssemblyAngularVelocity = Vector3.zero for i = 1, 3 do pcall(function() game:GetService("ReplicatedStorage").CharacterEvents.Struggle:FireServer(game.Players.LocalPlayer) end) task.wait(0.05) end teleported = false if SL ~= 'off' and SL then hrp.CFrame = CFrame.new(SL) teleported = true else plots = workspace:FindFirstChild("Plots") foundSafe = false if plots then for i = 1, 5 do plot = plots:FindFirstChild("Plot" .. i) if plot then sign = plot:FindFirstChild("PlotSign") ownersFolder = sign and sign:FindFirstChild("ThisPlotsOwners") valueObj = ownersFolder and ownersFolder:FindFirstChild("Value") if valueObj and valueObj.Value == game.Players.LocalPlayer.Name then grabPart = plot:FindFirstChild("PlusGrabPart", true) if grabPart then hrp.CFrame = grabPart.CFrame foundSafe = true teleported = true break end end end end end if not foundSafe then hrp.CFrame = CFrame.new(tpland["Spawn"]) teleported = true end end if teleported then hrp.AssemblyLinearVelocity = Vector3.zero hrp.AssemblyAngularVelocity = Vector3.zero if char:FindFirstChild("Humanoid") then char.Humanoid.PlatformStand = false char.Humanoid.Sit = false end task.wait(0.2) teleportDetected = false lastSafePosition = hrp.Position positionHistory = {} for i = 1, maxHistory do table.insert(positionHistory, lastSafePosition) end task.spawn(function() for i = 1, 5 do pcall(function() game:GetService("ReplicatedStorage").CharacterEvents.Struggle:FireServer(game.Players.LocalPlayer) end) task.wait(0.1) end end) end else if not teleportDetected and movedDistance < 50 then lastSafePosition = currentPos end end lastCheckTime = currentTime end end) else antiok = false positionHistory = {} teleportDetected = false isHeldSpamDetected = false heldChangeTimes = {} end end }) AntiTab:CreateSection("Anti annoy") players = game:GetService("Players") runService = game:GetService("RunService") localPlayer = game.Players.LocalPlayer workspace = game:GetService("Workspace") myToysFolder = workspace:WaitForChild(localPlayer.Name .. "SpawnedInToys") function getCharacter(player) char = player.Character if not char then if player.CharacterAdded then char = player.CharacterAdded:Wait() or nil else char = nil end end return char end function getHumanoidRootPart(character) return character:FindFirstChild("HumanoidRootPart") or nil end function getHumanoid(character) return character:FindFirstChild("Humanoid") or nil end function getDistance(part1, part2) return (part1.Position - part2.Position).Magnitude end function getAllToys(includePlots) allToys = {} playersList = players:GetPlayers() for _, player in ipairs(playersList) do toyFolder = workspace[player.Name .. "SpawnedInToys"] for _, toy in pairs(toyFolder:GetChildren()) do if toy:IsA("Model") then table.insert(allToys, toy) end end end if includePlots then for i = 1, 5 do for _, item in pairs(workspace.PlotItems["Plot" .. i]:GetChildren()) do if item:IsA("Model") then table.insert(allToys, item) end end end end return allToys end function spawnToy(toyName, cframe) if localPlayer.CanSpawnToy then task.spawn(function() toySpawn = replicatedStorage:WaitForChild("MenuToys"):WaitForChild("SpawnToyRemoteFunction") toySpawn:InvokeServer(toyName, cframe * CFrame.new(0, 10, 20), Vector3.new(0, 0, 0)) repeat task.wait() until myToysFolder:FindFirstChild(toyName) task.wait(0.01) return myToysFolder:FindFirstChild(toyName) end) end end function destroyToy(toy) task.spawn(function() success, err = pcall(function() toyDestroy = replicatedStorage:WaitForChild("MenuToys"):WaitForChild("DestroyToy") toyDestroy:FireServer(toy) end) if not success then warn("Error: " .. err) end end) end function setNetworkOwner(part, cframe) task.spawn(function() setNetworkOwnerRemote = replicatedStorage:WaitForChild("GrabEvents"):WaitForChild("SetNetworkOwner") setNetworkOwnerRemote:FireServer(part, cframe) end) end function toggleConstraint(constraint, enabled) if constraint then if constraint.Name ~= "LeftWeld" then if constraint.Name ~= "LeftAlignOrientation" then if constraint.Name ~= "RightWeld" then if constraint.Name == "RightAlignOrientation" and (constraint and constraint.Parent.Parent.Parent ~= myToysFolder) then constraint.Enabled = enabled end elseif constraint and constraint.Parent.Parent.Parent ~= myToysFolder then constraint.Enabled = enabled end elseif constraint and constraint.Parent.Parent.Parent ~= myToysFolder then constraint.Enabled = enabled end elseif constraint and constraint.Parent.Parent.Parent ~= myToysFolder then constraint.Enabled = enabled end end end function ragdollFall() rootPart = getHumanoidRootPart(getCharacter(localPlayer)) if rootPart then ragdollRemote = replicatedStorage:WaitForChild("CharacterEvents"):WaitForChild("RagdollRemote") ragdollRemote:FireServer(rootPart, 1) end end function antiBananaDeleteLegs() if getCharacter(localPlayer) ~= nil then task.spawn(function() ragdollFall() end) task.wait(0.1) character = getCharacter(localPlayer) rightLeg = character:FindFirstChild("Right Leg") leftLeg = character:FindFirstChild("Left Leg") clonedLeg = rightLeg:Clone() clonedLeg.Parent = character clonedLeg.BallSocketConstraint:Destroy() task.wait(0.1) rightLeg.CFrame = CFrame.new(0, - 59999, 0) leftLeg.CFrame = CFrame.new(0, - 59999, 0) task.wait() cup = spawnToy("CupMugBrown", getHumanoidRootPart(getCharacter(localPlayer)).CFrame) cup = myToysFolder:WaitForChild("CupMugBrown") setNetworkOwner(getHumanoidRootPart(character), CFrame.new(cup.Hitbox.Position)) task.wait() destroyToy(cup) clonedLeg.CFrame = CFrame.new(0, 9999999, 0) clonedLeg.Massless = true end end AntiTab:CreateButton({ Name = "Anti banana - delete legs", Callback = function() antiBananaDeleteLegs() end }) me = game:GetService("Players").LocalPlayer ReplicatedStorage = game:GetService("ReplicatedStorage") RagdollRemote = ReplicatedStorage:WaitForChild("CharacterEvents"):WaitForChild("RagdollRemote") AntiRagBlob = false RagdolledSit = false Cons = {} function FWC(parent, childName) return parent:FindFirstChild(childName) end function Disc(connectionName) if Cons[connectionName] then Cons[connectionName]:Disconnect() Cons[connectionName] = nil end end Toggle = AntiTab:CreateToggle({ Name = "Anti snowball", CurrentValue = false, Flag = "AntiRagdoll", Callback = function(Value) AntiRagBlob = Value RagdolledSit = false if AntiRagBlob then char = me.Character or me.CharacterAdded:Wait() hum = char and FWC(char, "Humanoid") HRP = char and FWC(char, "HumanoidRootPart") Cons["ARSeat"] = hum:GetPropertyChangedSignal("SeatPart"):Connect(function() if hum.SeatPart and hum.SeatPart.Parent.Name == "CreatureBlobman" and not RagdolledSit then RagdolledSit = true Seat = hum.SeatPart while not hum.Sit do task.wait() end RagdollRemote:FireServer(HRP, 3) while not hum.Ragdolled.Value and not hum.Sit do task.wait() end task.wait(0.4) hum.Sit = false Seat:Sit(hum) task.delay(0.25, function() while hum and hum.SeatPart do RagdollRemote:FireServer(me.Character.HumanoidRootPart, 1) task.wait(0.05) end RagdolledSit = false end) end end) Cons["ARChar"] = me.CharacterAdded:Connect(function(char) hum = char:WaitForChild("Humanoid") HRP = char:WaitForChild("HumanoidRootPart") Cons["ARSeat"] = hum:GetPropertyChangedSignal("SeatPart"):Connect(function() if hum.SeatPart and hum.SeatPart.Parent.Name == "CreatureBlobman" and not RagdolledSit then RagdolledSit = true Seat = hum.SeatPart while not hum.Sit do task.wait() end RagdollRemote:FireServer(HRP, 3) while not hum.Ragdolled.Value and not hum.Sit do task.wait() end task.wait(0.4) hum.Sit = false Seat:Sit(hum) task.delay(0.25, function() while hum and hum.SeatPart do RagdollRemote:FireServer(me.Character.HumanoidRootPart, 1) task.wait(0.05) end RagdolledSit = false end) end end) end) else Disc("ARSeat") Disc("ARChar") end end, }) GrabData = { toggle = false, lp = game.Players.LocalPlayer, ws = workspace, dropPos = CFrame.new(- 238.98, - 256.01, - 123.97) } function GrabItem(item) local hold = item:FindFirstChild("HoldPart") if not hold then return end local grab = hold:FindFirstChild("HoldItemRemoteFunction") local drop = hold:FindFirstChild("DropItemRemoteFunction") if grab and drop then pcall(function() grab:InvokeServer(item, GrabData.lp.Character) end) pcall(function() drop:InvokeServer(item, GrabData.dropPos, Vector3.new()) end) end end function GrabFolder(folder) for _, obj in ipairs(folder:GetDescendants()) do if obj:IsA("Model") and obj:FindFirstChild("HoldPart") then local holdPart = obj.HoldPart if holdPart:FindFirstChild("HoldItemRemoteFunction") then GrabItem(obj) end end end end function LoopGrab() while GrabData.toggle do for _, folder in ipairs(GrabData.ws:GetChildren()) do if folder:IsA("Folder") and folder.Name:find("SpawnedInToys") then GrabFolder(folder) end end local plotItems = GrabData.ws:FindFirstChild("PlotItems") if plotItems then for _, plot in pairs(plotItems:GetChildren()) do if plot.Name ~= "PlayersInPlots" then for _, model in pairs(plot:GetChildren()) do if model:IsA("Model") and model:FindFirstChild("HoldPart") then local holdPart = model.HoldPart if holdPart:FindFirstChild("HoldItemRemoteFunction") then GrabItem(model) end end end end end end task.wait(0.001) end end AntiTab:CreateToggle({ Name = "Delete holdables", Default = false, Callback = function(state) GrabData.toggle = state if state then task.spawn(LoopGrab) end end }) holdItemLoop = nil AntiTab:CreateSection("Holdparts (food and instruments)") AntiTab:CreateToggle({ Name = "Grab holdables", CurrentValue = false, Flag = "HoldItemToggle", Callback = function(enabled) if enabled then if not holdItemLoop then holdItemLoop = coroutine.create(function() while true do for _, item in pairs(workspace:GetDescendants()) do if item:IsA("Model") and item:FindFirstChild("HoldPart") then local holdArgs = { item, workspace:WaitForChild(game.Players.LocalPlayer.Name, 9e9) } local holdFunction = item.HoldPart:FindFirstChild("HoldItemRemoteFunction") if holdFunction then holdFunction:InvokeServer(unpack(holdArgs)) end end end task.wait(0.01) end end) coroutine.resume(holdItemLoop) end else if holdItemLoop then coroutine.close(holdItemLoop) holdItemLoop = nil end end end, }) AntiTab:CreateButton({ Name = "Use holdables", Callback = function() for _, item in pairs(workspace:GetDescendants()) do if item:IsA("Model") and item:FindFirstChild("HoldPart") then local useArgs = { item } local useFunction = game:GetService("ReplicatedStorage"):WaitForChild("HoldEvents", 9e9):WaitForChild("Use", 9e9) if useFunction then useFunction:FireServer(unpack(useArgs)) end end end end, }) AntiTab:CreateButton({ Name = "Drop Holdables", Callback = function() local Char = game.Players.LocalPlayer.Character or game.Players.LocalPlayer.CharacterAdded:Wait() local HRP = Char:WaitForChild("HumanoidRootPart") for _, item in pairs(workspace:GetDescendants()) do if item:IsA("Model") and item:FindFirstChild("HoldPart") then local dropFunction = item.HoldPart:FindFirstChild("DropItemRemoteFunction") if dropFunction then local dropPosition = HRP.CFrame local dropArgs = { item, dropPosition, Vector3.new(0, 0, 0) } dropFunction:InvokeServer(unpack(dropArgs)) end end end end, }) AntiTab:CreateSection("Auto Attacker") Players = game:GetService("Players") ReplicatedStorage = game:GetService("ReplicatedStorage") RunService = game:GetService("RunService") Debris = game:GetService("Debris") LocalPlayer = Players.LocalPlayer defenseEnabled = false defenseConnection = nil defenseMode = "Fling" GrabEvents = ReplicatedStorage:WaitForChild("GrabEvents") SetNetworkOwner = GrabEvents:WaitForChild("SetNetworkOwner") DestroyGrabLine = GrabEvents:FindFirstChild("DestroyGrabLine") CreateGrabEvent = GrabEvents:FindFirstChild("CreateGrabLine") function getAttacker() local char = LocalPlayer.Character if not char or not char:FindFirstChild("Head") then return end local owner = char.Head:FindFirstChild("PartOwner") if not owner or not owner:IsA("StringValue") then return end return Players:FindFirstChild(owner.Value) end function performFling(attacker) if not attacker or not attacker.Character then return end local root = attacker.Character:FindFirstChild("HumanoidRootPart") if not root then return end pcall(function() SetNetworkOwner:FireServer(root, root.CFrame) if DestroyGrabLine then DestroyGrabLine:FireServer(root) end local away = (root.Position - LocalPlayer.Character.HumanoidRootPart.Position).Unit away = Vector3.new(away.X, 0, away.Z) * 90000 local bv = Instance.new("BodyVelocity") bv.Name = "RinneganFling" bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge) bv.Velocity = away bv.P = 12500 bv.Parent = root Debris:AddItem(bv, 0.01) end) end function performKill(attacker) if not attacker or not attacker.Character then return end local root = attacker.Character:FindFirstChild("HumanoidRootPart") if not root then return end pcall(function() SetNetworkOwner:FireServer(root, root.CFrame) if DestroyGrabLine then DestroyGrabLine:FireServer(root) end local away = (root.Position - LocalPlayer.Character.HumanoidRootPart.Position).Unit away = Vector3.new(away.X, 0, away.Z) * 99999999999999 local bv = Instance.new("BodyVelocity") bv.Name = "RinneganFling" bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge) bv.Velocity = away bv.P = 12500 bv.Parent = root Debris:AddItem(bv, 0.01) end) end function performHeaven(attacker) if not attacker or not attacker.Character then return end local root = attacker.Character:FindFirstChild("HumanoidRootPart") if not root then return end pcall(function() SetNetworkOwner:FireServer(root, root.CFrame) if DestroyGrabLine then DestroyGrabLine:FireServer(root) end root.CFrame = CFrame.new(0, 200, 0) local bv = Instance.new("BodyVelocity") bv.Name = "RinneganHeaven" bv.MaxForce = Vector3.new(0, math.huge, 0) bv.Velocity = Vector3.new(0, 200, 0) bv.P = 12500 bv.Parent = root Debris:AddItem(bv, 0.01) end) end function performKick(attacker) if not attacker or not attacker.Character then return end local root = attacker.Character:FindFirstChild("HumanoidRootPart") if not root then return end pcall(function() SetNetworkOwner:FireServer(root, root.CFrame) if DestroyGrabLine then DestroyGrabLine:FireServer(root) end root.CFrame = CFrame.new(0, 999999999999, 0) local bv = Instance.new("BodyVelocity") bv.Name = "RinneganHeaven" bv.MaxForce = Vector3.new(0, math.huge, 0) bv.Velocity = Vector3.new(0, 99999999999999, 0) bv.P = 12500 bv.Parent = root Debris:AddItem(bv, 0.01) end) end function performRagdoll(attacker) if not attacker or not attacker.Character then return end local root = attacker.Character:FindFirstChild("HumanoidRootPart") if not root then return end pcall(function() SetNetworkOwner:FireServer(root, root.CFrame) if DestroyGrabLine then DestroyGrabLine:FireServer(root) end local bv = Instance.new("BodyVelocity") bv.Name = "RinneganSpy" bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge) bv.Velocity = Vector3.new(0, - 20, 0) bv.P = 12500 bv.Parent = root Debris:AddItem(bv, 0.01) end) end function performHell(attacker) if not attacker or not attacker.Character then return end local root = attacker.Character:FindFirstChild("HumanoidRootPart") if not root then return end pcall(function() SetNetworkOwner:FireServer(root, root.CFrame) if DestroyGrabLine then DestroyGrabLine:FireServer(root) end for _, part in ipairs(attacker.Character:GetDescendants()) do if part:IsA("BasePart") and not part.Anchored then part.CanCollide = false end end local bv = Instance.new("BodyVelocity") bv.Name = "RinneganSpy" bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge) bv.Velocity = Vector3.new(0, - 100000000, 0) bv.P = 12500 bv.Parent = root local noclipConnection noclipConnection = RunService.Heartbeat:Connect(function() if not attacker.Character or not attacker.Character.Parent then noclipConnection:Disconnect() return end for _, part in ipairs(attacker.Character:GetDescendants()) do if part:IsA("BasePart") and not part.Anchored then part.CanCollide = false end end end) task.delay(0.01, function() if noclipConnection then noclipConnection:Disconnect() end end) Debris:AddItem(bv, 0.01) end) end function performChina(attacker) if not attacker or not attacker.Character then return end local root = attacker.Character:FindFirstChild("HumanoidRootPart") if not root then return end pcall(function() SetNetworkOwner:FireServer(root, root.CFrame) if DestroyGrabLine then DestroyGrabLine:FireServer(root) end root.CFrame = CFrame.new(591, 153, - 101) end) end crazyline = false function performSpamGrabLines(attacker) while crazyline do local char = LocalPlayer.Character if char then local head = char:FindFirstChild("Head") if head then local owner = head:FindFirstChild("PartOwner") if owner and owner:IsA("StringValue") then local attacker = Players:FindFirstChild(owner.Value) if attacker and attacker.Character then local attackerHead = attacker.Character:FindFirstChild("Head") local attackerHRP = attacker.Character:FindFirstChild("HumanoidRootPart") if attackerHead and attackerHRP then for i = 1, 10 do pcall(function() CreateGrabEvent:FireServer(attackerHead, attackerHead.CFrame) end) end for i = 1, 10 do pcall(function() CreateGrabEvent:FireServer(attackerHRP, attackerHRP.CFrame) end) end end end end end end task.wait(0.01) end end function startDefense() if defenseConnection then return end defenseConnection = RunService.Heartbeat:Connect(function() if not defenseEnabled then return end local attacker = getAttacker() if not attacker then return end if defenseMode == "Fling" then performFling(attacker) elseif defenseMode == "Kill" then performKill(attacker) elseif defenseMode == "Send to Heaven" then performHeaven(attacker) elseif defenseMode == "Kick" then performKick(attacker) elseif defenseMode == "Ragdoll" then performRagdoll(attacker) elseif defenseMode == "Hell" then performHell(attacker) elseif defenseMode == "China" then performChina(attacker) elseif defenseMode == "GrabLine" then performSpamGrabLines(attacker) end end) end function stopDefense() if defenseConnection then defenseConnection:Disconnect() defenseConnection = nil end for _, plr in ipairs(Players:GetPlayers()) do local char = plr.Character if char then for _, obj in ipairs(char:GetDescendants()) do if obj:IsA("BodyVelocity") and (obj.Name == "RinneganFling" or obj.Name == "RinneganHeaven") then obj:Destroy() end end end end end LocalPlayer.CharacterAdded:Connect(function() if defenseEnabled then task.wait(1) startDefense() end end) AntiTab:CreateToggle({ Name = 'Auto-Attack', CurrentValue = false, Flag = "RinneganDefenseToggle", Callback = function(enabled) defenseEnabled = enabled if enabled then startDefense() else stopDefense() end end }) AntiTab:CreateDropdown({ Name = "Mode", Options = { "Fling", "Kill", "Send to Heaven", "Kick", "Ragdoll", "Hell", "China", "GrabLine" }, CurrentOption = "Fling", Flag = "RinneganMode", Callback = function(mode) if typeof(mode) == "table" then mode = mode[1] end defenseMode = mode end }) local KeybindTab = Window:CreateTab("Keybinds", "keyboard") local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer local Mouse = LocalPlayer:GetMouse() -- Keybind 1: Teleport (ID: Keybind1) local TeleportKeybind = KeybindTab:CreateKeybind({ Name = "Teleport", CurrentKeybind = "Z", HoldToInteract = false, Flag = "Keybind1", Callback = function(Keybind) local Character = LocalPlayer.Character if Character and Character:FindFirstChild("HumanoidRootPart") and Mouse.Hit then -- วาร์ปไปตำแหน่งที่เมาส์ชี้ + ยกตัวขึ้นเล็กน้อย (3 studs) เพื่อไม่ให้จมดิน Character.HumanoidRootPart.CFrame = CFrame.new(Mouse.Hit.Position + Vector3.new(0, 3, 0)) end end }) local Players = game:GetService("Players") local Workspace = game:GetService("Workspace") local LocalPlayer = Players.LocalPlayer local Camera = Workspace.CurrentCamera local controllingDecoy = false local ControlYouDecoyKeybind = KeybindTab:CreateKeybind({ Name = "Control Decoy", CurrentKeybind = "C", HoldToInteract = false, Flag = "ControlYouDecoyFlag", -- เปลี่ยน Flag ไม่ให้ซ้ำกับ Keybind1 เพื่อป้องกัน Config ชนกัน Callback = function(Keybind) local Character = LocalPlayer.Character if not Character then return end local MainHumanoid = Character:FindFirstChildOfClass("Humanoid") -- ค้นหาตัวละคร Decoy ใน Workspace โดยใช้ ID/ชื่อ "YouDecoy" local Decoy = Workspace:FindFirstChild("YouDecoy") local DecoyHumanoid = Decoy and Decoy:FindFirstChildOfClass("Humanoid") if not controllingDecoy then -- สลับไปสวมรอยสลับการควบคุม Decoy if DecoyHumanoid then Camera.CameraSubject = DecoyHumanoid LocalPlayer.Character = Decoy controllingDecoy = true end else -- สลับกลับมาควบคุมตัวละครหลัก if MainHumanoid then Camera.CameraSubject = MainHumanoid LocalPlayer.Character = Character controllingDecoy = false end end end, }) local CombatTab = Window:CreateTab("Grab", "sword") local Section = CombatTab:CreateSection("Grab") _G.strength = 750 local strengthConnection CombatTab:CreateSlider({ Name = "Power", Range = {1, 20000}, Increment = 1, Suffix = "Force", CurrentValue = 750, Flag = "ThrowPowerSlider", Callback = function(value) _G.strength = value end }) CombatTab:CreateToggle({ Name = "Strength", CurrentValue = false, Flag = "ThrowStrengthToggle", Callback = function(enabled) if enabled then strengthConnection = workspace.ChildAdded:Connect(function(model) if model.Name == "GrabParts" then local grabPart = model:FindFirstChild("GrabPart") if not grabPart then return end local weld = grabPart:FindFirstChild("WeldConstraint") if not weld then return end local partToImpulse = weld.Part1 if not partToImpulse then return end local velocityObj = Instance.new("BodyVelocity") velocityObj.Parent = partToImpulse model:GetPropertyChangedSignal("Parent"):Connect(function() if not model.Parent then if UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton2) then velocityObj.MaxForce = Vector3.new(math.huge, math.huge, math.huge) velocityObj.Velocity = workspace.CurrentCamera.CFrame.LookVector * _G.strength Debris:AddItem(velocityObj, 1) else velocityObj:Destroy() end end end) end end) elseif strengthConnection then strengthConnection:Disconnect() strengthConnection = nil end end }) ---------------------------------------------------- -- KILL GRAB (StateType + RigType R15) ---------------------------------------------------- local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer local killGrabEnabled = false workspace.ChildAdded:Connect(function(v) if not killGrabEnabled then return end if not v:IsA("Model") or v.Name ~= "GrabParts" then return end task.wait(0.05) local grabPart = v:FindFirstChild("GrabPart") if not grabPart then return end local weld = grabPart:FindFirstChild("WeldConstraint") if not weld then return end local part1 = weld.Part1 if not part1 then return end if not part1.Parent then return end if part1.Parent == LocalPlayer.Character then return end local targetChar = part1.Parent local humanoid = targetChar:FindFirstChildOfClass("Humanoid") if not humanoid then return end ------------------------------------------------ -- FORCE R15 RIG ------------------------------------------------ local player = Players:GetPlayerFromCharacter(targetChar) if player then pcall(function() -- this forces roblox to rebuild the character player:LoadCharacterWithHumanoidDescription( Players:GetHumanoidDescriptionFromUserId(player.UserId), Enum.HumanoidRigType.R15 ) end) end end) CombatTab:CreateToggle({ Name = "Kill Grab", CurrentValue = false, Flag = "KillGrabToggle", Callback = function(Value) killGrabEnabled = Value end }) CombatTab:CreateToggle({ Name = "Ragdoll Grab", CurrentValue = false, Flag = "RagdollGrabToggle", Callback = function(state) RG_enabled = state if not state then for _, conn in ipairs(RG_GrabConn) do conn:Disconnect() end for _, conn in ipairs(RG_RagdollConn) do conn:Disconnect() end for _, conn in ipairs(RG_HeartbeatConn) do conn:Disconnect() end RG_GrabConn = {} RG_RagdollConn = {} RG_HeartbeatConn = {} RG_FollowList = {} RG_currentPallet = nil return end local function RG_getSpawnCFrame() local char = LPlayer.Character if char then local hrp = char:FindFirstChild("HumanoidRootPart") if hrp then RG_lastHRP = hrp.CFrame return hrp.CFrame end end return RG_lastHRP end local function RG_teleAway(pallet) if not pallet then return end for _, part in ipairs(pallet:GetDescendants()) do if part:IsA("BasePart") then part.CFrame = CFrame.new(0, 9e18, 0) part.Anchored = false part.CanCollide = false part.Transparency = 1 end end end local function RG_spawnPallet() local pos = RG_getSpawnCFrame() ReplicatedStorage.MenuToys.SpawnToyRemoteFunction:InvokeServer( "PalletLightBrown", pos * CFrame.new(5, 0, 5), Vector3.new(0, 33, 0) ) end -- 🔧 FIXED: ownership spam protection local function RG_handlePallet(pallet) if pallet:GetAttribute(RG_ATTR) then return end if RG_currentPallet and RG_currentPallet.Parent then return end local soundPart = pallet:WaitForChild("SoundPart") local ownershipConfirmed = false ReplicatedStorage.GrabEvents.SetNetworkOwner:FireServer(soundPart, soundPart.CFrame) local triesDelay = 0.25 local maxTime = 3 local lastTry = 0 local startTime = tick() local conn conn = RunService.Heartbeat:Connect(function() if ownershipConfirmed then conn:Disconnect() return end local ownerTag = soundPart:FindFirstChild("PartOwner") if ownerTag and ownerTag.Value == LPlayer.Name then ownershipConfirmed = true pallet:SetAttribute(RG_ATTR, true) RG_currentPallet = pallet for _, part in ipairs(pallet:GetDescendants()) do if part:IsA("BasePart") then if not part:FindFirstChild("RG_BV") then local bv = Instance.new("BodyVelocity") bv.Name = "RG_BV" bv.Velocity = Vector3.new(0, 200, 0) bv.MaxForce = Vector3.new(1e5, 1e5, 1e5) bv.P = 1e4 bv.Parent = part end part.CanCollide = false part.Transparency = 1 end end conn:Disconnect() return end if tick() - lastTry < triesDelay then return end lastTry = tick() if tick() - startTime >= maxTime then ReplicatedStorage.MenuToys.DestroyToy:FireServer(pallet) conn:Disconnect() return end ReplicatedStorage.GrabEvents.SetNetworkOwner:FireServer(soundPart, soundPart.CFrame) end) end local function RG_followLoop(player) if RG_FollowList[player] then return end RG_FollowList[player] = true local humanoid = player.Character and player.Character:FindFirstChildWhichIsA("Humanoid") local rag = humanoid and humanoid:FindFirstChild("Ragdolled") task.spawn(function() while RG_enabled and RG_FollowList[player] and RG_currentPallet do if not rag or not rag.Value then local hrp = player.Character and player.Character:FindFirstChild("HumanoidRootPart") if hrp then for _, part in ipairs(RG_currentPallet:GetDescendants()) do if part:IsA("BasePart") then part.CFrame = hrp.CFrame part.CanCollide = false part.Transparency = 1 end end end else break end task.wait(0.1) end RG_FollowList[player] = nil RG_teleAway(RG_currentPallet) end) if rag and rag:IsA("BoolValue") then local conn conn = rag.Changed:Connect(function(val) if val then RG_FollowList[player] = nil RG_teleAway(RG_currentPallet) conn:Disconnect() end end) table.insert(RG_RagdollConn, conn) end end local function RG_monitorGrabParts(container) task.spawn(function() while container.Parent and RG_enabled do local grabPart = container:FindFirstChild("GrabPart") local weld = grabPart and grabPart:FindFirstChildOfClass("WeldConstraint") if weld and weld.Part1 then for _, plr in ipairs(Players:GetPlayers()) do if plr.Character and weld.Part1:IsDescendantOf(plr.Character) then RG_followLoop(plr) end end else for plr in pairs(RG_FollowList) do RG_FollowList[plr] = nil end end task.wait(0.1) end end) end table.insert(RG_GrabConn, RG_ToysFolder.ChildAdded:Connect(function(c) if c.Name == "PalletLightBrown" then RG_handlePallet(c) end end)) table.insert(RG_GrabConn, RG_ToysFolder.ChildRemoved:Connect(function(c) if c == RG_currentPallet then RG_currentPallet = nil end end)) table.insert(RG_GrabConn, Workspace.ChildAdded:Connect(function(c) if c.Name == "GrabParts" then RG_monitorGrabParts(c) end end)) table.insert(RG_HeartbeatConn, RunService.Heartbeat:Connect(function() if not RG_enabled then return end if not RG_currentPallet or not RG_currentPallet.Parent then local owned for _, toy in ipairs(RG_ToysFolder:GetChildren()) do if toy:GetAttribute(RG_ATTR) then owned = toy break end end if owned then RG_currentPallet = owned else RG_spawnPallet() end end end)) for _, obj in ipairs(Workspace:GetChildren()) do if obj.Name == "GrabParts" then RG_monitorGrabParts(obj) end end RG_spawnPallet() end }) local activeSparklers = {} local sparklerConfig = { Height = 5, Speed = 2, Radius = 15, CurrentShape = 'Spinning Ring', } local shapeOptions = { 'Spinning Ring', 'Supernova', 'Ophanim', 'Planet', 'Sphere', 'Cylinder', 'Double Ring', 'Star', 'Infinity', 'Heart', 'DNA Helix', 'Triple Helix', 'Tornado', 'Galaxy Spiral', 'Fibonacci Spiral', 'Spring Coil', 'Vortex Funnel', 'Box', 'Rounded Cube', 'Torus', 'Torus Knot', 'Möbius Strip', 'Saturn', 'Ice Cube', 'Rain', 'Sword', 'Sword v2', 'Sword v3', 'Energy', 'Tsunami', 'Grid', 'Robot', 'Explosion', 'Flower', 'Penis', 'DivineLight', 'Crown', 'Hexagram', 'CubeOrbit', 'RingFloor', 'Event Horzion', "Pulsar Star", 'Explosionv2', 'Dragon', 'Crazy Orbit', 'Crazy Orbit v2', 'Laser Beam', 'Hexagram Crazy', 'Gyro', 'Gyro2', 'Whipslash', 'Sky', 'Manji', 'Small Circle', 'Atom', 'Meteor Shower', 'Meteor Shower (Star)', 'Diamond', 'SolarSystem', 'Windmill', 'Cat', 'Tentacle', 'Portal', 'Water Wave', 'Moon Orbit' } local function SetupPhysics(obj, list) for _, v in ipairs(list) do if v == obj then return end end local mainPart = obj:IsA('BasePart') and obj or obj.PrimaryPart or obj:FindFirstChildWhichIsA('BasePart', true) if not mainPart then return end pcall(function() if mainPart:CanSetNetworkOwnership() then mainPart:SetNetworkOwner(LocalPlayer) end end) mainPart.Anchored = false local bp = mainPart:FindFirstChild('ToyBodyPos') or Instance.new('BodyPosition', mainPart) bp.Name = 'ToyBodyPos' bp.MaxForce = Vector3.new(1e8, 1e8, 1e8) bp.P = 100000 bp.D = 800 local bg = mainPart:FindFirstChild('ToyBodyGyro') or Instance.new('BodyGyro', mainPart) bg.Name = 'ToyBodyGyro' bg.MaxTorque = Vector3.new(1e8, 1e8, 1e8) bg.P = 50000 for _, p in ipairs(obj:GetDescendants()) do if p:IsA('BasePart') then p.CanCollide = false end end table.insert(list, obj) end CombatTab:CreateButton({ Name = "Synchronize All Sparklers", Callback = function() activeSparklers = {} for _, obj in ipairs(Workspace:GetDescendants()) do if obj.Name:find('FireworkSparkler') then SetupPhysics(obj, activeSparklers) end end print("ซิงค์ไอเทมสำเร็จ จำนวนทั้งหมด: " .. #activeSparklers) end, }) CombatTab:CreateButton({ Name = "Unsynchronize All Sparklers", Callback = function() activeSparklers = {} print("ยกเลิกการซิงค์ทั้งหมดแล้ว") end, }) CombatTab:CreateSlider({ Name = "Height Offset", Range = {-20, 150}, Increment = 1, Suffix = "Studs", CurrentValue = 5, Flag = "Sparkler_Height", Callback = function(Value) sparklerConfig.Height = Value end, }) CombatTab:CreateSlider({ Name = "Shape Radius", Range = {0, 400}, Increment = 1, Suffix = "Radius", CurrentValue = 15, Flag = "Sparkler_Radius", Callback = function(Value) sparklerConfig.Radius = Value end, }) CombatTab:CreateSlider({ Name = "Rotation Speed", Range = {0, 50}, Increment = 0.5, Suffix = "Speed", CurrentValue = 15, Flag = "Sparkler_Speed", Callback = function(Value) sparklerConfig.Speed = Value end, }) CombatTab:CreateDropdown({ Name = "Select Shape", Options = shapeOptions, CurrentOption = "Spinning Ring", Flag = "Sparkler_Shape", Callback = function(Option) if type(Option) == "table" then sparklerConfig.CurrentShape = Option[1] or "Spinning Ring" else sparklerConfig.CurrentShape = tostring(Option) end print("เปลี่ยนรูปทรงเป็น: " .. tostring(sparklerConfig.CurrentShape)) end, }) -- ==================== SPARKLER TARGET PLAYER DROPDOWN ==================== local sparklerTargetPlayer = "None" local sparklerPlayerNames = {"None"} local function UpdateSparklerPlayerList() sparklerPlayerNames = {"None"} for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer then table.insert(sparklerPlayerNames, player.Name) end end end local TAU = math.pi * 2 local sqrt = math.sqrt local sin = math.sin local cos = math.cos local clamp = math.clamp local Shapes = {} -- Moon Orbit (Sphere หลัก 1 อัน + Sphere เล็กๆ โคจร) Shapes['Moon Orbit'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- Sphere หลัก 1 อัน (อันแรก) if i == 1 then -- ดวงจันทร์หลัก (ตรงกลาง) local phi = math.acos(1 - 2 * (i / safeN)) local theta = i * math.pi * (3 - math.sqrt(5)) + t * sp * 0.5 local radius = r * 0.3 local x = math.cos(theta) * math.sin(phi) * radius local y = math.cos(phi) * radius + h local z = math.sin(theta) * math.sin(phi) * radius return Vector3.new(x, y, z) else -- Sphere เล็กๆ โคจรรอบ local idx = i - 1 local count = safeN - 1 -- โคจรเป็นวงกลม local angle = (idx / count) * TAU + t * sp * 2 local orbitRadius = r * 0.7 local x = math.cos(angle) * orbitRadius local z = math.sin(angle) * orbitRadius local y = h + math.sin(t * sp * 0.5 + idx) * orbitRadius * 0.1 return Vector3.new(x, y, z) end end -- Water Wave (คลื่นน้ำ) Shapes['Water Wave'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- คลื่นน้ำ (หมุนเป็นวงกลม + กระเพื่อม) local angle = ((i - 1) / safeN) * TAU + t * sp * 1.5 -- คลื่นกระเพื่อม (เหมือนน้ำ) local wave = math.sin(angle * 2 + t * sp * 2) * r * 0.3 local wave2 = math.cos(angle * 3 + t * sp * 1.5) * r * 0.2 -- รัศมีของคลื่น local radius = r * (0.7 + 0.3 * math.sin(t * sp * 1.5 + i * 0.1)) -- ตำแหน่ง X, Z local x = math.cos(angle) * radius + wave local z = math.sin(angle) * radius + wave2 -- ความสูง (คลื่นจะสูงขึ้นและต่ำลง) local y = h + math.sin(angle * 3 + t * sp * 2) * r * 0.2 return Vector3.new(x, y, z) end Shapes.Diamond = function(i, n, t, r, h, sp) local frac = i / n local y = (frac - 0.5) * r * 2 local radius = r * math.abs(math.sin(frac * TAU)) return Vector3.new(math.cos(t * sp + i) * radius, h + y, math.sin(t * sp + i) * radius) end Shapes.SolarSystem = function(i, n, t, r, h, sp) local planet = i % 8 local dist = r * (0.2 + planet * 0.1) local angle = (i / n) * TAU + t * sp * (1 + planet * 0.2) return Vector3.new(math.cos(angle) * dist, h + math.sin(i * 0.5) * 2, math.sin(angle) * dist) end Shapes.Windmill = function(i, n, t, r, h, sp) local blade = i % 4 local bladeAngle = blade * (TAU / 4) + t * sp local radius = r * (0.5 + 0.5 * (i / n)) return Vector3.new(math.cos(bladeAngle) * radius, h + math.sin(t * sp + i) * 2, math.sin(bladeAngle) * radius) end Shapes.Tentacle = function(i, n, t, r, h, sp) local frac = i / n local angle = frac * TAU * 2 + t * sp * 0.5 local radius = r * frac return Vector3.new(math.cos(angle) * radius, h + math.sin(frac * TAU * 4 + t * sp) * r * 0.5, math.sin(angle) * radius) end Shapes.Portal = function(i, n, t, r, h, sp) local frac = i / n local angle = frac * TAU + t * sp local radius = r * (1 + 0.3 * math.sin(t * sp * 2 + i * 0.5)) local distort = math.sin(t * sp * 3 + frac * TAU) * r * 0.1 return Vector3.new(math.cos(angle) * radius + distort, h + math.sin(t * sp + i) * 3, math.sin(angle) * radius + distort) end -- Meteor Shower (ตกลงมาเป็นรูปดาว) Shapes['Galaxy Methor'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- รูปดาว (Star Shape) local angle = ((i - 1) / safeN) * TAU + t * sp * 2 local starRadius = (i % 2 == 0) and r or r * 0.38 -- ตำแหน่ง X, Z ของดาว local x = math.cos(angle) * starRadius local z = math.sin(angle) * starRadius -- การตกลงมา (Meteor Shower) local seed = i * 137.508 local fallSpeed = 30 + math.sin(seed * 0.5) * 10 local fallTime = (t * sp * 3 + i * 5) % 200 -- ตกแล้ววนกลับ -- ตำแหน่ง Y: ตกลงมาจากฟ้า local y = h + 100 - fallTime * 0.8 -- เคลื่อนที่ไปด้านข้างเล็กน้อยขณะตกลง x = x + math.sin(t * sp * 0.5 + i) * 10 z = z + math.cos(t * sp * 0.5 + i) * 10 -- ทำให้ดูเหมือนมีหาง (เส้นหลัง) local trail = math.max(0, 1 - (fallTime / 200)) * 3 return Vector3.new(x, y + trail, z) end -- Small Circle (วงโคจรเล็กๆ + หันหาตัวตลอด) Shapes['Small Circle'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- แต่ละ Sparkler มีวงกลมของตัวเอง local seed = i * 137.508 -- ตำแหน่งกลางของวงกลม (กระจายตัวรอบตัว) local centerX = math.sin(seed * 0.1 + t * sp * 0.1) * r * 0.8 local centerZ = math.cos(seed * 0.05 + t * sp * 0.1) * r * 0.8 local centerY = h + math.sin(seed * 0.03 + t * sp * 0.05) * r * 0.3 -- วงโคจรเล็กๆ (รอบ Sparkler แต่ละชิ้น) local orbitRadius = r * 0.1 + math.sin(seed * 0.5) * r * 0.05 local orbitAngle = t * sp * (3 + math.cos(seed * 0.1)) + seed -- ตำแหน่งในวงโคจร local x = centerX + math.cos(orbitAngle) * orbitRadius local z = centerZ + math.sin(orbitAngle) * orbitRadius local y = centerY + math.sin(t * sp * 0.5 + seed) * orbitRadius * 0.5 return Vector3.new(x, y, z) end -- Manji (สวัสติกะ) Shapes.Manji = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- สวัสติกะประกอบด้วย 4 แขน แต่ละแขนมี 2 ท่อน local armCount = 4 local segmentCount = math.floor(safeN / (armCount * 2)) if segmentCount < 1 then segmentCount = 1 end -- คำนวณว่า Sparkler นี้อยู่แขนไหน local armIndex = math.floor((i - 1) / (segmentCount * 2)) % armCount local segmentIndex = (i - 1) % (segmentCount * 2) local isInner = segmentIndex < segmentCount -- ท่อนในหรือท่อนนอก -- มุมของแต่ละแขน (0, 90, 180, 270 องศา) local armAngle = (armIndex / armCount) * TAU + t * sp * 2 -- ความยาวของแขน local armLength = r * 0.8 -- ตำแหน่งตามแขน local progress = (segmentIndex % segmentCount) / segmentCount local distance = isInner and (progress * armLength * 0.5) or (armLength * 0.5 + progress * armLength * 0.5) -- มุมของท่อน (ท่อนในไปทางซ้าย, ท่อนนอกไปทางขวา) local segmentAngle = isInner and (armAngle - TAU / 4) or (armAngle + TAU / 4) -- คำนวณตำแหน่ง X, Z local x = math.cos(armAngle) * (isInner and distance * 0.5 or distance) + math.cos(segmentAngle) * (isInner and distance * 0.5 or 0) local z = math.sin(armAngle) * (isInner and distance * 0.5 or distance) + math.sin(segmentAngle) * (isInner and distance * 0.5 or 0) -- ความสูง (หมุนเป็นวงกลมเล็กน้อย) local y = h + math.sin(t * sp * 1.5 + i * 0.3) * r * 0.1 return Vector3.new(x, y, z) end -- Sky (วาร์ปไปวาร์ปมาเป็นเส้นตรง) Shapes.Sky = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local seed = i * 137.508 + i * i * 0.01 -- กำหนดจุดเริ่มต้นและจุดปลาย (เส้นตรง) local startX = math.sin(seed * 0.1) * r local startZ = math.cos(seed * 0.05) * r local startY = h + math.abs(math.sin(seed * 0.03)) * 30 local endX = math.cos(seed * 0.1) * r local endZ = math.sin(seed * 0.05) * r local endY = h + math.abs(math.cos(seed * 0.03)) * 30 + 20 -- การวาร์ป (กระโดดไปมาเป็นจังหวะ) local warpPhase = math.sin(t * sp * 0.5 + i * 0.5) local warp = math.floor(warpPhase * 2) % 2 -- 0 หรือ 1 สลับกัน -- ถ้าวาร์ป = 0 ไปจุดเริ่มต้น, ถ้า = 1 ไปจุดปลาย local targetX = (warp == 0) and startX or endX local targetZ = (warp == 0) and startZ or endZ local targetY = (warp == 0) and startY or endY -- เพิ่มการเคลื่อนที่แบบเส้นตรงเล็กน้อยระหว่างวาร์ป local moveX = math.sin(t * sp * 0.1 + i) * 5 local moveZ = math.cos(t * sp * 0.1 + i) * 5 local moveY = math.sin(t * sp * 0.1 + i * 0.5) * 3 local x = targetX + moveX local z = targetZ + moveZ local y = targetY + moveY return Vector3.new(x, y, z) end -- Gyro (10 ชั้น หมุนสวนทางกัน) Shapes.Gyro = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local layers = 10 local pointsPerLayer = math.max(math.floor(safeN / layers), 1) local layerIndex = math.floor((i - 1) / pointsPerLayer) if layerIndex >= layers then layerIndex = layers - 1 end local posInLayer = (i - 1) % pointsPerLayer -- แต่ละชั้นมีรัศมีต่างกัน local radius = r * (0.2 + 0.8 * (layerIndex + 1) / layers) local heightOffset = (layerIndex - (layers - 1) / 2) * (r * 0.15) local yPos = h + heightOffset -- สุ่มทิศทาง: ชั้นคู่หมุนไปทางขวา, ชั้นคี่หมุนไปทางซ้าย local direction = (layerIndex % 2 == 0) and 1 or -1 local randomSpeed = 2 + math.sin(layerIndex * 1.5) * 1.5 -- สุ่มความเร็ว 0.5-3.5 local angle = (posInLayer / pointsPerLayer) * TAU + t * sp * randomSpeed * direction local x = math.cos(angle) * radius local z = math.sin(angle) * radius return Vector3.new(x, yPos, z) end -- Hexagram Crazy (6 จุดรวมกัน + โคจรบ้าคลั่ง) Shapes['Hexagram Crazy'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- ดาวหกแฉก 6 จุด (รวมกันเป็นก้อนเดียว) local pointsPerTriangle = 3 local totalPoints = 6 -- จุดยอดของสามเหลี่ยม local pointIndex = (i - 1) % totalPoints local isFirstTriangle = pointIndex < pointsPerTriangle -- ตำแหน่งพื้นฐานของดาวหกแฉก (6 จุดอยู่รวมกัน) local spin = t * sp * 2 local baseX, baseY, baseZ if isFirstTriangle then local idx = pointIndex local a = idx * (TAU / 3) + spin baseX = math.cos(a) * r baseZ = math.sin(a) * r baseY = h else local idx = pointIndex - pointsPerTriangle local a = idx * (TAU / 3) + math.pi / 3 + spin baseX = math.cos(a) * r baseZ = math.sin(a) * r baseY = h end -- รวม 6 จุดให้เป็นก้อนเดียว (ย่อขนาดลง) local scale = 0.3 -- ย่อขนาดให้เล็กลง baseX = baseX * scale baseY = baseY * scale baseZ = baseZ * scale -- เพิ่มการโคจรบ้าคลั่ง (ก้อนเดียวเคลื่อนที่ไปมา) local seed = i * 137.508 local noise1 = math.sin(seed * 0.1 + t * sp * 3) * math.cos(seed * 0.05 + t * sp * 2) local noise2 = math.cos(seed * 0.08 + t * sp * 4) * math.sin(seed * 0.12 + t * sp * 3) local noise3 = math.sin(seed * 0.15 + t * sp * 5) * math.cos(seed * 0.1 + t * sp * 4) -- ก้อนเดียวเคลื่อนที่บ้าคลั่งไปมา local crazyX = noise1 * r * 1.2 local crazyY = noise2 * r * 1.2 local crazyZ = noise3 * r * 1.2 -- รวมตำแหน่ง: 6 จุดรวมกัน + เคลื่อนที่บ้าคลั่ง local finalX = baseX + crazyX local finalY = baseY + crazyY local finalZ = baseZ + crazyZ return Vector3.new(finalX, finalY, finalZ) end -- Whipslash (เส้นตรง ฟาดเร็ว) Shapes.Whipslash = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local whipLength = r * 3 local yPos = h + ((i - 1) / safeN) * whipLength -- ฟาดเร็วขึ้น local whipPhase = math.sin(t * sp * 4) local swingX = whipPhase * r * 0.9 local x = swingX local z = 0 return Vector3.new(x, yPos, z) end -- Laser Beam (ลำแสงกระพริบ) Shapes['Laser Beam'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local beamLength = r * 3 local yPos = h + ((i - 1) / safeN) * beamLength - beamLength/2 -- ลำแสงกระพริบเป็นจังหวะ local flicker = 1 + 0.3 * math.sin(t * sp * 6 + i * 0.5) local angle = ((i - 1) / safeN) * TAU + t * sp * 3 local radius = r * 0.1 * flicker local x = math.cos(angle) * radius local z = math.sin(angle) * radius return Vector3.new(x, yPos, z) end -- Crazy Orbit v2 (โคจรบ้าคลั่งแต่อยู่กับที่ + ลดความเร็ว) Shapes['Crazy Orbit v2'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- ลดความเร็วลง (sp ช้าลง) local slowSpeed = sp * 0.3 -- สุ่มตำแหน่งโดยใช้ noise function แต่ช้าลง local seed = i * 137.508 local noise1 = math.sin(seed * 0.1 + t * slowSpeed * 1.5) * math.cos(seed * 0.05 + t * slowSpeed * 1) local noise2 = math.cos(seed * 0.08 + t * slowSpeed * 2) * math.sin(seed * 0.12 + t * slowSpeed * 1.2) local noise3 = math.sin(seed * 0.15 + t * slowSpeed * 2.5) * math.cos(seed * 0.1 + t * slowSpeed * 1.8) -- จำกัดรัศมีให้อยู่ในวงแคบ (อยู่กับที่) local randomRadius = r * (0.3 + 0.4 * math.abs(noise1)) -- แคบลง -- สุ่มมุม (เปลี่ยนช้าลง) local randomAngle = noise2 * TAU + t * slowSpeed * 2 -- สุ่มความสูง (อยู่ในกรอบ) local randomHeight = h + noise3 * r * 0.4 -- สูงไม่มาก -- ตำแหน่ง X, Z local x = math.cos(randomAngle) * randomRadius local z = math.sin(randomAngle) * randomRadius return Vector3.new(x, randomHeight, z) end -- Crazy Orbit (แต่ละชิ้นเคลื่อนที่อิสระ) Shapes['Crazy Orbit'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- แต่ละชิ้นมี seed ต่างกัน local seed = i * 137.508 + i * i * 0.01 -- สุ่มแบบไม่เหมือนกัน local noise1 = math.sin(seed * 0.1 + t * sp * (2 + i * 0.05)) * math.cos(seed * 0.05 + t * sp * (1.5 + i * 0.03)) local noise2 = math.cos(seed * 0.08 + t * sp * (2.5 + i * 0.04)) * math.sin(seed * 0.12 + t * sp * (1.8 + i * 0.02)) local noise3 = math.sin(seed * 0.15 + t * sp * (3 + i * 0.06)) * math.cos(seed * 0.1 + t * sp * (2.2 + i * 0.05)) -- สุ่มรัศมี, มุม, ความสูง local randomRadius = r * (0.2 + 0.8 * math.abs(noise1)) local randomAngle = noise2 * TAU + t * sp * (2 + i * 0.1) local randomHeight = h + noise3 * r * 1.2 local x = math.cos(randomAngle) * randomRadius local z = math.sin(randomAngle) * randomRadius return Vector3.new(x, randomHeight, z) end -- Dragon Shape (มังกรมีหัวและหาง) Shapes.Dragon = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local frac = i / safeN -- ส่วนหัว (20% แรก) local isHead = frac < 0.2 -- ส่วนหาง (20% สุดท้าย) local isTail = frac > 0.8 local bodyLength = r * 3 local yPos = h - bodyLength/2 + frac * bodyLength -- คลื่นของลำตัว local wave = math.sin(frac * TAU * 4 + t * sp * 2) * r * 0.3 local wave2 = math.cos(frac * TAU * 3 + t * sp * 1.5) * r * 0.2 local angle = frac * TAU * 1.5 + t * sp * 1.5 -- ขนาดรัศมี (หัวใหญ่ หางเล็ก) local radius = r * 0.4 if isHead then radius = radius * (1.5 - frac * 2) -- หัวใหญ่ elseif isTail then radius = radius * (1 - (frac - 0.8) * 2) -- หางเล็ก end local x = math.cos(angle) * radius + wave local z = math.sin(angle) * radius + wave2 return Vector3.new(x, yPos, z) end -- 0. Spinning Ring Shapes['Spinning Ring'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local a = ((i - 1) / safeN) * TAU + (t * sp * 5) return Vector3.new(cos(a) * r, h, sin(a) * r) end -- Supernova Shape Shapes.Supernova = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local phi = math.acos(clamp(1 - 2 * (i / safeN), -1, 1)) local theta = i * math.pi * (3 - sqrt(5)) + (t * sp * 2) local pulse = 1 + 0.3 * sin(t * sp * 4 + i) local currentR = r * pulse local x = cos(theta) * sin(phi) * currentR local y = cos(phi) * currentR + h local z = sin(theta) * sin(phi) * currentR return Vector3.new(x, y, z) end -- 1. Ophanim Shapes.Ophanim = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local ring = (i - 1) % 3 local ringIndex = math.floor((i - 1) / 3) local ringTotal = math.max(math.floor(safeN / 3), 1) local frac = ringIndex / ringTotal local a = frac * TAU + t * sp * (ring == 0 and 1 or (ring == 1 and -1.5 or 2)) local rx = r * (ring == 0 and 1 or 0.75) local rz = r * (ring == 1 and 1 or 0.5) local x = cos(a) * rx local y = sin(a * 2 + t * sp) * (r * 0.25) + h local z = sin(a) * rz if ring == 1 then x, y = y - h, x + h elseif ring == 2 then z, y = y - h, z + h end return Vector3.new(x, y, z) end -- 2. Planet Shapes.Planet = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local coreN = clamp(math.floor(safeN * 0.35), 4, 15) coreN = math.min(coreN, safeN) local ring1N = math.max(math.floor((safeN - coreN) / 2), 1) local spin = t * sp if i <= coreN then local phi = math.acos(clamp(1 - 2 * (i / coreN), -1, 1)) local theta = i * math.pi * (3 - sqrt(5)) + spin local cr = r * 0.35 return Vector3.new(cos(theta) * sin(phi) * cr, cos(phi) * cr + h, sin(theta) * sin(phi) * cr) elseif i <= coreN + ring1N then local idx = i - coreN local a = (idx / ring1N) * TAU + spin local rr = r * 0.9 local tilt = math.rad(30) return Vector3.new(cos(a) * rr, sin(a) * rr * sin(tilt) + h, sin(a) * rr * cos(tilt)) else local idx = i - (coreN + ring1N) local c = math.max(safeN - (coreN + ring1N), 1) local a = (idx / c) * TAU + t * sp * 0.5 local rr = r * 1.3 local tilt = math.rad(-40) return Vector3.new(cos(a) * rr, sin(a) * rr * sin(tilt) + h, sin(a) * rr * cos(tilt)) end end -- 3. Sphere Shapes.Sphere = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local phi = math.acos(clamp(1 - 2 * (i / safeN), -1, 1)) local theta = i * math.pi * (3 - sqrt(5)) + t * sp * 2 return Vector3.new(cos(theta) * sin(phi) * r, cos(phi) * r + h, sin(theta) * sin(phi) * r) end -- 4. Cylinder Shapes.Cylinder = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local a = ((i - 1) / safeN) * TAU + t * sp local y = ((i - 1) / safeN) * r * 1.5 - r * 0.75 return Vector3.new(cos(a) * r, h + y, sin(a) * r) end -- 5. Double Ring Shapes['Double Ring'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local halfN = math.max(math.floor(safeN / 2), 1) local a = (((i - 1) % halfN) / halfN) * TAU + t * sp if i <= halfN then return Vector3.new(cos(a) * r, h, sin(a) * r) else return Vector3.new(0, h + cos(a) * r, sin(a) * r) end end -- 6. Star Shapes.Star = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local a = ((i - 1) / safeN) * TAU + t * sp local rr = (i % 2 == 0) and r or r * 0.38 return Vector3.new(cos(a) * rr, h + sin(t * sp * 1.5 + i * 0.3) * 1.5, sin(a) * rr) end -- 7. Infinity Shapes.Infinity = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local a = ((i - 1) / safeN) * TAU + t * sp local d = 1 + sin(a) ^ 2 return Vector3.new((r * cos(a)) / d, h + sin(t * sp + i * 0.2) * 1.2, (r * sin(a) * cos(a)) / d) end -- 8. Heart Shapes.Heart = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local a = ((i - 1) / safeN) * TAU + t * sp local pulse = 1 + 0.12 * sin(t * sp * 2) local scale = (r / 15) * pulse local x = 16 * sin(a) ^ 3 local z = -(13 * cos(a) - 5 * cos(2 * a) - 2 * cos(3 * a) - cos(4 * a)) return Vector3.new(x * scale, h + sin(t * sp * 2) * 0.5, z * scale) end -- 9. DNA Helix Shapes['DNA Helix'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local y = ((i - 1) / safeN) * r * 2 - r local a = ((i - 1) / safeN) * TAU + t * sp + y * 0.5 local side = (i % 2 == 0) and 1 or -1 return Vector3.new(cos(a) * r * side, h + y, sin(a) * r * side) end -- 10. Triple Helix Shapes['Triple Helix'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local y = ((i - 1) / safeN) * r * 2 - r local a = ((i - 1) / safeN) * TAU + t * sp + y * 0.5 local phase = ((i - 1) % 3) * (TAU / 3) return Vector3.new(cos(a + phase) * r, h + y, sin(a + phase) * r) end -- 11. Tornado Shapes.Tornado = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local y = ((i - 1) / safeN) * (r * 2) local currentR = (y / (r * 2)) * r local a = ((i - 1) / safeN) * TAU * 3 + t * sp * 3 return Vector3.new(cos(a) * currentR, h + y - r, sin(a) * currentR) end -- 12. Galaxy Spiral Shapes['Galaxy Spiral'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local a = ((i - 1) / safeN) * TAU * 2 + t * sp local currentR = ((i - 1) / safeN) * r return Vector3.new(cos(a) * currentR, h + sin(a * 2) * 0.5, sin(a) * currentR) end -- 13. Fibonacci Spiral Shapes['Fibonacci Spiral'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local phi = (1 + sqrt(5)) / 2 local a = (i - 1) * phi * TAU + t * sp local currentR = sqrt((i - 1) / safeN) * r return Vector3.new(cos(a) * currentR, h, sin(a) * currentR) end -- 14. Spring Coil Shapes['Spring Coil'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local y = ((i - 1) / safeN) * (r * 2) - r local a = ((i - 1) / safeN) * TAU * 5 + t * sp * 2 return Vector3.new(cos(a) * (r * 0.5), h + y, sin(a) * (r * 0.5)) end -- Event Horizon (ขอบฟ้าเหตุการณ์ - วงแหวนหมุน) Shapes['Event Horizon'] = function(i, n, t, r, h, sp) local frac = i / n local a = frac * TAU * 6 + t * sp local ring = r * (0.3 + 0.7 * abs(sin(frac * math.pi))) local glow = 1 + 0.2 * sin(t * sp * 2 + frac * TAU) return Vector3.new(cos(a) * ring * glow, h + sin(t * sp + frac * TAU) * 2, sin(a) * ring * glow) end -- Pulsar Star (ดาวพัลซาร์ - กระพริบเป็นจังหวะ) Shapes['Pulsar Star'] = function(i, n, t, r, h, sp) local frac = i / n local a = frac * TAU * 4 + t * sp * 3 local pulse = 1 + 0.5 * sin(t * sp * 6 + i) local dist = r * frac * pulse local y = h + sin(t * sp * 3 + frac * TAU) * r * 0.3 return Vector3.new(cos(a) * dist, y, sin(a) * dist) end -- 15. Vortex Funnel Shapes['Vortex Funnel'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local y = ((i - 1) / safeN) * (r * 2) - r local currentR = math.abs(y) * 0.8 local a = ((i - 1) / safeN) * TAU * 4 + t * sp * 3 return Vector3.new(cos(a) * currentR, h + y, sin(a) * currentR) end -- 16. Box Shapes.Box = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local sideN = math.max(math.floor(safeN / 6), 1) local face = math.floor((i - 1) / sideN) % 6 local idx = (i - 1) % sideN local f = (idx / sideN) * (r * 2) - r local x, y, z = 0, 0, 0 if face == 0 then x, y, z = r, f, (idx % 2 == 0 and r or -r) elseif face == 1 then x, y, z = -r, f, (idx % 2 == 0 and r or -r) elseif face == 2 then x, y, z = f, r, (idx % 2 == 0 and r or -r) elseif face == 3 then x, y, z = f, -r, (idx % 2 == 0 and r or -r) elseif face == 4 then x, y, z = (idx % 2 == 0 and r or -r), f, r else x, y, z = (idx % 2 == 0 and r or -r), f, -r end return Vector3.new(x, h + y, z) end -- 17. Rounded Cube Shapes['Rounded Cube'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local phi = math.acos(clamp(1 - 2 * (i / safeN), -1, 1)) local theta = i * math.pi * (3 - sqrt(5)) + t * sp local x = cos(theta) * sin(phi) local y = cos(phi) local z = sin(theta) * sin(phi) local f = 1 + 0.2 * (x^4 + y^4 + z^4) return Vector3.new((x * r) / f, h + (y * r) / f, (z * r) / f) end -- 18. Torus Shapes.Torus = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local majorN = clamp(math.floor(sqrt(safeN) * 1.5), 3, safeN) local minorN = math.max(math.floor(safeN / majorN), 1) local u = (((i - 1) % majorN) / majorN) * TAU + t * sp local v = (math.floor((i - 1) / majorN) / minorN) * TAU local R = r local tubeR = r * 0.35 local x = (R + tubeR * cos(v)) * cos(u) local y = tubeR * sin(v) local z = (R + tubeR * cos(v)) * sin(u) return Vector3.new(x, h + y, z) end -- 19. Torus Knot Shapes['Torus Knot'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local p, q = 2, 3 local phi = ((i - 1) / safeN) * TAU * q + t * sp local r_knot = r * (0.8 + 0.2 * cos(p * phi / q)) local x = r_knot * cos(phi) local y = r_knot * sin(phi) * 0.5 local z = r_knot * sin(p * phi / q) return Vector3.new(x, h + y, z) end -- 20. Möbius Strip Shapes['Möbius Strip'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local u = ((i - 1) / safeN) * TAU + t * sp local v = ((i % 2 == 0) and 1 or -1) * (r * 0.3) local x = (r + v * cos(u / 2)) * cos(u) local y = v * sin(u / 2) local z = (r + v * cos(u / 2)) * sin(u) return Vector3.new(x, h + y, z) end -- 21. Saturn Shapes.Saturn = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local coreN = clamp(math.floor(safeN * 0.5), 4, 20) coreN = math.min(coreN, safeN) local ringN = math.max(safeN - coreN, 1) local spin = t * sp if i <= coreN then local phi = math.acos(clamp(1 - 2 * (i / coreN), -1, 1)) local theta = i * math.pi * (3 - sqrt(5)) + spin local cr = r * 0.4 return Vector3.new(cos(theta) * sin(phi) * cr, cos(phi) * cr + h, sin(theta) * sin(phi) * cr) else local idx = i - coreN local a = (idx / ringN) * TAU + spin * 1.5 local rr = r * 1.4 return Vector3.new(cos(a) * rr, h, sin(a) * rr) end end -- 22. Ice Cube Shapes['Ice Cube'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local sideN = math.max(math.floor(safeN / 8), 1) local face = math.floor((i - 1) / sideN) % 8 local idx = (i - 1) % sideN local f = (idx / sideN) * r - (r * 0.5) local hr = r * 0.6 local x, y, z = 0, 0, 0 if face == 0 then x, y, z = hr, f, hr elseif face == 1 then x, y, z = -hr, f, hr elseif face == 2 then x, y, z = hr, f, -hr elseif face == 3 then x, y, z = -hr, f, -hr elseif face == 4 then x, y, z = f, hr, hr elseif face == 5 then x, y, z = f, hr, -hr elseif face == 6 then x, y, z = f, -hr, hr else x, y, z = f, -hr, -hr end return Vector3.new(x, h + y, z) end -- 23. Rain Effect (ฝนตกเร็ว) Shapes.Rain = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local angle = ((i - 1) / safeN) * math.pi * 2 + t * sp * 12 local fallSpeed = 40 + (i % 5) * 3 local yPos = (h + r * 1.5) - ((t * fallSpeed + i * 0.1) % (r * 3)) local radiusOffset = r * (0.8 + 0.2 * math.sin(t * 15 + i * 3)) local x = math.cos(angle) * radiusOffset local z = math.sin(angle) * radiusOffset return Vector3.new(x, yPos, z) end -- 24. Sword Shape (ดาบโผล่จากพื้น - แบบที่คุณต้องการ) Shapes.Sword = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- ความยาวดาบ (โผล่จากพื้น) local bladeLength = r * 3 local bladeWidth = r * 0.2 -- ตำแหน่ง Y: โผล่จากพื้น (เริ่มจาก 0 ขึ้นไป) local yPos = h + ((i - 1) / safeN) * bladeLength -- มุมหมุนรอบตัว (หมุนเป็นวงกลม) local angle = ((i - 1) / safeN) * TAU + t * sp * 2 -- ตำแหน่ง X, Z local x = math.cos(angle) * bladeWidth local z = math.sin(angle) * bladeWidth return Vector3.new(x, yPos, z) end -- 25. Sword v2 (ดาบโผล่จากพื้นแบบเกลียว) Shapes['Sword v2'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- ความยาวดาบ local bladeLength = r * 3 local bladeWidth = r * 0.2 -- ตำแหน่ง Y: โผล่จากพื้น local yPos = h + ((i - 1) / safeN) * bladeLength -- มุมหมุน: หมุนเป็นเกลียว (เพิ่มมุมตามความสูง) local angle = ((i - 1) / safeN) * TAU * 3 + t * sp * 2 -- รัศมี: ขยายกว้างขึ้นตามความสูง (ดาบจะบานออกด้านบน) local radius = bladeWidth * (1 + ((i - 1) / safeN) * 2) -- ตำแหน่ง X, Z local x = math.cos(angle) * radius local z = math.sin(angle) * radius return Vector3.new(x, yPos, z) end -- 26. Sword v3 (ดาบโผล่จากพื้นและเอียงเข้าหาตัว) Shapes['Sword v3'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- ความยาวดาบ local bladeLength = r * 2.5 local bladeWidth = r * 0.25 -- ตำแหน่ง Y: โผล่จากพื้น local yPos = h + ((i - 1) / safeN) * bladeLength -- มุมหมุนรอบตัว local angle = ((i - 1) / safeN) * TAU + t * sp * 1.5 -- รัศมี: แคบลงเมื่อสูงขึ้น (ดาบจะเอียงเข้าหาตัว) local radius = bladeWidth * (1 - ((i - 1) / safeN) * 0.8) -- ตำแหน่ง X, Z local x = math.cos(angle) * radius local z = math.sin(angle) * radius return Vector3.new(x, yPos, z) end -- Energy Shape (ลูกบอลพลังงานหมุนรอบตัว) Shapes.Energy = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- ตำแหน่งแบบลูกบอลพลังงาน (Sphere) local phi = math.acos(math.clamp(1 - 2 * (i / safeN), -1, 1)) local theta = i * math.pi * (3 - math.sqrt(5)) + t * sp * 2 local currentR = r * (0.5 + 0.3 * math.sin(t * 0.5 + i * 0.1)) local x = math.cos(theta) * math.sin(phi) * currentR local y = math.cos(phi) * currentR + h local z = math.sin(theta) * math.sin(phi) * currentR return Vector3.new(x, y, z) end -- 28. Tsunami Shape (คลื่นสึนามิ) Shapes.Tsunami = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- ความสูงของคลื่น local waveHeight = r * 1.5 local waveWidth = r * 0.8 -- ตำแหน่ง Y: คลื่นจะซัดขึ้นจากพื้นแล้วลดลง local phase = ((i - 1) / safeN) * TAU local waveY = h + (waveHeight * 0.5) + (math.sin(phase + t * sp * 2) * waveHeight * 0.5) -- ตำแหน่ง X, Z: กระจายเป็นแนวคลื่น local angle = phase + t * sp * 1.5 local radius = waveWidth * (1 + 0.3 * math.sin(t * sp + i * 0.2)) local x = math.cos(angle) * radius local z = math.sin(angle) * radius return Vector3.new(x, waveY, z) end -- 29. Grid Shape (เวอร์ชันระนาบ 2D) Shapes.Grid = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- ขนาดตาราง 2D (x และ z) local gridSize = math.floor(math.sqrt(safeN)) + 1 if gridSize < 2 then gridSize = 2 end local cellSize = (r * 2) / gridSize local totalCells = gridSize * gridSize local idx = (i - 1) % totalCells local xIndex = idx % gridSize local zIndex = math.floor(idx / gridSize) local xPos = (xIndex - (gridSize - 1) / 2) * cellSize local yPos = h local zPos = (zIndex - (gridSize - 1) / 2) * cellSize -- หมุนระนาบ local rotAngle = t * sp * 1.5 local cosA = math.cos(rotAngle) local sinA = math.sin(rotAngle) local rotatedX = xPos * cosA - zPos * sinA local rotatedZ = xPos * sinA + zPos * cosA return Vector3.new(rotatedX, yPos, rotatedZ) end -- 30. Robot Shape (หุ่นยนต์หมุนรอบตัว) Shapes.Robot = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- ส่วนประกอบของหุ่นยนต์ local headCount = math.floor(safeN * 0.15) -- หัว 15% local bodyCount = math.floor(safeN * 0.25) -- ลำตัว 25% local armCount = math.floor(safeN * 0.30) -- แขน 30% local legCount = safeN - headCount - bodyCount - armCount -- ขา 30% -- ปรับจำนวนให้ถูกต้อง if legCount < 0 then legCount = 0 end -- มุมหมุนรอบตัว local angle = ((i - 1) / safeN) * TAU + t * sp * 2 -- ตำแหน่งตามส่วนต่างๆ if i <= headCount then -- หัว (ส่วนบน) local headY = h + r * 0.8 local headRadius = r * 0.15 local x = math.cos(angle) * headRadius local z = math.sin(angle) * headRadius return Vector3.new(x, headY, z) elseif i <= headCount + bodyCount then -- ลำตัว (ส่วนกลาง) local bodyY = h local bodyRadius = r * 0.3 local idx = i - headCount local yOffset = (idx / bodyCount) * r * 0.4 - r * 0.2 local x = math.cos(angle) * bodyRadius local z = math.sin(angle) * bodyRadius return Vector3.new(x, h + yOffset, z) elseif i <= headCount + bodyCount + armCount then -- แขน (ด้านข้าง) local idx = i - headCount - bodyCount local armAngle = angle + math.pi / 2 -- แขนจะอยู่ด้านข้าง local armY = h + (idx / armCount) * r * 0.4 - r * 0.2 local armRadius = r * 0.35 local x = math.cos(armAngle) * armRadius local z = math.sin(armAngle) * armRadius return Vector3.new(x, armY, z) else -- ขา (ส่วนล่าง) local idx = i - headCount - bodyCount - armCount local legAngle = angle + math.pi / 4 -- ขาจะอยู่ด้านล่าง local legY = h - r * 0.5 + (idx / legCount) * r * 0.3 local legRadius = r * 0.25 local x = math.cos(legAngle) * legRadius local z = math.sin(legAngle) * legRadius return Vector3.new(x, legY, z) end end -- 31. Explosion Shape (ระเบิดหมุนเป็นวงกลม) Shapes.Explosion = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- วงกลมระเบิด local angle = ((i - 1) / safeN) * TAU + t * sp * 2 local pulse = 1 + 0.4 * math.sin(t * sp * 3 + i * 0.1) local currentR = r * pulse * (0.5 + 0.5 * ((i - 1) / safeN)) local x = math.cos(angle) * currentR local y = h + math.sin(t * sp * 2 + i * 0.2) * 2 local z = math.sin(angle) * currentR return Vector3.new(x, y, z) end -- Atom (อะตอม - นิวเคลียส + อิเล็กตรอนโคจร) Shapes.Atom = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- แบ่งเป็นนิวเคลียส (30%) และอิเล็กตรอน (70%) local nucleusCount = math.floor(safeN * 0.3) local electronCount = safeN - nucleusCount if i <= nucleusCount then -- นิวเคลียส (รวมกันตรงกลาง) local phi = math.acos(1 - 2 * (i / nucleusCount)) local theta = i * math.pi * (3 - math.sqrt(5)) + t * sp * 0.5 local radius = r * 0.15 local x = math.cos(theta) * math.sin(phi) * radius local y = math.cos(phi) * radius + h local z = math.sin(theta) * math.sin(phi) * radius return Vector3.new(x, y, z) else -- อิเล็กตรอน (โคจรเป็นวงแหวน) local idx = i - nucleusCount local electronRing = idx % 3 -- 3 วงโคจร local ringAngle = (electronRing / 3) * TAU local posInRing = math.floor(idx / 3) local countInRing = math.max(math.floor(electronCount / 3), 1) local angle = (posInRing / countInRing) * TAU + t * sp * (2 + electronRing * 0.5) + ringAngle -- แต่ละวงมีรัศมีต่างกัน local ringRadius = r * (0.4 + electronRing * 0.2) -- วงโคจรเอียง (เพื่อให้ดูเหมือนอะตอมจริง) local tiltX = math.sin(ringAngle) * ringRadius * 0.1 local tiltY = math.cos(ringAngle) * ringRadius * 0.1 local x = math.cos(angle) * ringRadius local z = math.sin(angle) * ringRadius local y = h + tiltY + math.sin(t * sp * 0.5 + idx) * 0.5 return Vector3.new(x, y, z) end end -- Meteor Shower (ฝนดาวตก - ตกลงมาเป็นเส้นตรง) Shapes['Meteor Shower'] = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- แต่ละดาวตกมีตำแหน่งและความเร็วต่างกัน local seed = i * 137.508 -- ตำแหน่งเริ่มต้น (บนฟ้า) local startX = math.sin(seed * 0.1) * r * 2 local startZ = math.cos(seed * 0.05) * r * 2 local startY = h + 100 + math.abs(math.sin(seed * 0.03)) * 50 -- ความเร็วและทิศทาง local speed = 20 + math.sin(seed * 0.5) * 10 local dirX = math.cos(seed * 0.1) * speed local dirZ = math.sin(seed * 0.05) * speed -- ตำแหน่งตามเวลา (ตกลงมาเรื่อยๆ) local time = t * sp * 2 local fall = (time * speed + i * 10) % 200 -- ตกแล้ววนกลับ local x = startX + dirX * (fall / 200) local z = startZ + dirZ * (fall / 200) local y = startY - fall -- ทำให้ดูเหมือนมีหาง (เส้นหลัง) local trail = math.max(0, 1 - (fall / 200)) * 5 return Vector3.new(x, y + trail, z) end -- 32. Flower Shape (ดอกไม้) Shapes.Flower = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- ส่วนประกอบของดอกไม้ local petalCount = math.floor(safeN * 0.7) -- กลีบดอก 70% local centerCount = safeN - petalCount -- กลางดอก 30% if i <= petalCount then -- กลีบดอก (หมุนเป็นวงกลม) local angle = ((i - 1) / petalCount) * TAU + t * sp * 1.5 local petalRadius = r * 0.8 local petalLength = r * 0.6 -- กลีบดอกจะบานออก local bloom = 1 + 0.2 * math.sin(t * sp * 2 + i * 0.3) local x = math.cos(angle) * petalRadius * bloom local z = math.sin(angle) * petalRadius * bloom local y = h + math.sin(angle * 2 + t * sp) * (r * 0.2) return Vector3.new(x, y, z) else -- กลางดอก (ตรงกลาง) local idx = i - petalCount local centerAngle = idx * math.pi * (3 - math.sqrt(5)) + t * sp local centerRadius = r * 0.2 local x = math.cos(centerAngle) * centerRadius local y = math.cos(centerAngle * 2) * centerRadius * 0.5 + h local z = math.sin(centerAngle) * centerRadius return Vector3.new(x, y, z) end end -- 32. Flower Shape (ดอกไม้บาน) Shapes.Flower = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local petalCount = math.floor(safeN * 0.7) local centerCount = safeN - petalCount -- ดอกไม้บานตามเวลา local bloom = 1 + 0.3 * math.sin(t * sp * 2) if i <= petalCount then local angle = ((i - 1) / petalCount) * TAU + t * sp * 1.5 local petalRadius = r * 0.8 * bloom local petalLength = r * 0.5 -- กลีบดอกจะขยับขึ้นลง local wave = math.sin(t * sp * 3 + i * 0.5) * (r * 0.2) local x = math.cos(angle) * petalRadius local z = math.sin(angle) * petalRadius local y = h + wave return Vector3.new(x, y, z) else local idx = i - petalCount local centerAngle = idx * math.pi * (3 - math.sqrt(5)) + t * sp local centerRadius = r * 0.2 * bloom local x = math.cos(centerAngle) * centerRadius local y = math.cos(centerAngle * 2) * centerRadius * 0.5 + h local z = math.sin(centerAngle) * centerRadius return Vector3.new(x, y, z) end end -- 34. Divine Light Shape (แสงพระเจ้า) Shapes.DivineLight = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- แสงจะส่องจากด้านบนลงมา local heightRange = r * 3 -- ความสูงของลำแสง -- ตำแหน่ง Y: จากบนลงล่าง local yPos = h + heightRange - ((i - 1) / safeN) * heightRange -- มุมหมุนรอบตัว (แสงจะหมุนรอบ) local angle = ((i - 1) / safeN) * TAU + t * sp * 1.5 -- รัศมี: แสงจะกว้างที่ด้านบนและแคบลงด้านล่าง local radius = r * (0.8 - ((i - 1) / safeN) * 0.6) -- ตำแหน่ง X, Z local x = math.cos(angle) * radius local z = math.sin(angle) * radius return Vector3.new(x, yPos, z) end -- 35. Crown Shape (มงกุฏ) Shapes.Crown = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- ส่วนประกอบของมงกุฏ local baseCount = math.floor(safeN * 0.4) -- ฐาน 40% local spikeCount = math.floor(safeN * 0.4) -- ยอด 40% local jewelCount = safeN - baseCount - spikeCount -- เพชร 20% -- มุมหมุนรอบตัว local angle = ((i - 1) / safeN) * TAU + t * sp * 2 if i <= baseCount then -- ฐานของมงกุฏ (วงแหวน) local idx = i - 1 local baseRadius = r * 0.8 local baseHeight = h + r * 0.2 local x = math.cos(angle) * baseRadius local z = math.sin(angle) * baseRadius return Vector3.new(x, baseHeight, z) elseif i <= baseCount + spikeCount then -- ยอดของมงกุฏ (สามเหลี่ยม) local idx = i - baseCount local spikeHeight = (idx / spikeCount) * r * 0.8 local spikeRadius = r * 0.8 * (1 - (idx / spikeCount) * 0.7) local x = math.cos(angle) * spikeRadius local z = math.sin(angle) * spikeRadius local y = h + r * 0.2 + spikeHeight return Vector3.new(x, y, z) else -- เพชรประดับ (จุดที่ยอด) local idx = i - baseCount - spikeCount local jewelAngle = angle + math.pi / 4 local jewelRadius = r * 0.3 local jewelY = h + r * 1.0 + math.sin(t * sp * 3 + idx) * r * 0.1 local x = math.cos(jewelAngle) * jewelRadius local z = math.sin(jewelAngle) * jewelRadius return Vector3.new(x, jewelY, z) end end -- 36. Hexagram Shape (ดาวหกแฉก 3D) Shapes.Hexagram = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local pointsPerTriangle = 3 local totalPoints = 6 -- มุมหมุน 3 มิติ local rotX = math.sin(t * sp * 0.5) * (r * 0.3) local rotY = t * sp * 1.5 local pointIndex = (i - 1) % totalPoints local isFirstTriangle = pointIndex < pointsPerTriangle if isFirstTriangle then local idx = pointIndex local a = idx * (TAU / 3) + rotY local x = math.cos(a) * r local z = math.sin(a) * r local y = h + rotX * math.sin(a) return Vector3.new(x, y, z) else local idx = pointIndex - pointsPerTriangle local a = idx * (TAU / 3) + math.pi / 3 + rotY local x = math.cos(a) * r local z = math.sin(a) * r local y = h - rotX * math.sin(a) return Vector3.new(x, y, z) end end -- 37. CubeOrbit Shape (หมุนและโคจรเร็ว) Shapes.CubeOrbit = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) local cubeSize = math.floor(math.cbrt(safeN)) + 1 if cubeSize < 2 then cubeSize = 2 end if cubeSize > 6 then cubeSize = 6 end local totalPoints = cubeSize * cubeSize * cubeSize local idx = (i - 1) % totalPoints local xIdx = idx % cubeSize local yIdx = math.floor(idx / cubeSize) % cubeSize local zIdx = math.floor(idx / (cubeSize * cubeSize)) local half = (cubeSize - 1) / 2 local localX = (xIdx - half) / cubeSize local localY = (yIdx - half) / cubeSize local localZ = (zIdx - half) / cubeSize local cubeRadius = r * 0.6 -- หมุนรอบตัวเองเร็วขึ้น (Spin) local spinAngle = t * sp * 6 local cosSpin = math.cos(spinAngle) local sinSpin = math.sin(spinAngle) local rotatedX = localX * cosSpin - localZ * sinSpin local rotatedZ = localX * sinSpin + localZ * cosSpin local rotatedY = localY local cubeX = rotatedX * cubeRadius local cubeY = rotatedY * cubeRadius + h local cubeZ = rotatedZ * cubeRadius -- โคจรรอบผู้เล่นเร็วขึ้น (Orbit) local orbitAngle = t * sp * 3 local orbitRadius = r * 1.2 local orbitX = math.cos(orbitAngle) * orbitRadius local orbitZ = math.sin(orbitAngle) * orbitRadius local finalX = cubeX + orbitX local finalY = cubeY local finalZ = cubeZ + orbitZ return Vector3.new(finalX, finalY, finalZ) end -- 38. Angel Shape (ปีกอยู่ข้างตัว + วงแหวนหมุน) Shapes.Angel = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- จำนวนชิ้นส่วน: วงแหวน 10 อัน, ปีกซ้าย 10 อัน, ปีกขวา 10 อัน local haloCount = 10 local leftWingCount = 10 local rightWingCount = 10 local totalCount = haloCount + leftWingCount + rightWingCount -- ถ้ามี Sparkler น้อยกว่า 30 อัน ให้ปรับจำนวนให้พอดี if safeN < totalCount then local ratio = safeN / totalCount haloCount = math.max(1, math.floor(haloCount * ratio)) leftWingCount = math.max(1, math.floor(leftWingCount * ratio)) rightWingCount = math.max(1, math.floor(rightWingCount * ratio)) totalCount = haloCount + leftWingCount + rightWingCount end -- การกระพือปีก (ขยับขึ้นลง) local flap = math.sin(t * sp * 2) if i <= haloCount then -- วงแหวนบนหัว (หมุน) local idx = i - 1 local haloAngle = (idx / haloCount) * TAU + t * sp * 3 -- หมุน local haloRadius = r * 0.6 local haloY = h + r * 1.3 local glow = 1 + 0.2 * math.sin(t * sp * 3 + idx) local x = math.cos(haloAngle) * haloRadius * glow local z = math.sin(haloAngle) * haloRadius * glow return Vector3.new(x, haloY, z) elseif i <= haloCount + leftWingCount then -- ปีกซ้าย (อยู่ข้างตัว ไม่หมุน) local idx = i - haloCount local wingProgress = idx / leftWingCount -- ปีกซ้ายอยู่ข้างตัว (X ติดลบ) local wingY = h + math.sin(wingProgress * math.pi * 0.8) * r * 0.8 + flap * r * 0.3 * wingProgress local wingX = -r * 0.7 local wingZ = (wingProgress - 0.5) * r * 1.2 return Vector3.new(wingX, wingY, wingZ) else -- ปีกขวา (อยู่ข้างตัว ไม่หมุน) local idx = i - haloCount - leftWingCount local wingProgress = idx / rightWingCount -- ปีกขวาอยู่ข้างตัว (X เป็นบวก) local wingY = h + math.sin(wingProgress * math.pi * 0.8) * r * 0.8 + flap * r * 0.3 * wingProgress local wingX = r * 0.7 local wingZ = (wingProgress - 0.5) * r * 1.2 return Vector3.new(wingX, wingY, wingZ) end end -- 39. RingFloor Shape (วงแหวนบนพื้น) Shapes.RingFloor = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- วงแหวนจะอยู่ที่ระดับพื้น (h = 0) local floorY = 0 -- มุมหมุน local angle = ((i - 1) / safeN) * TAU + t * sp * 3 -- รัศมีของวงแหวน local radius = r * 0.9 -- ตำแหน่ง X, Z local x = math.cos(angle) * radius local z = math.sin(angle) * radius return Vector3.new(x, floorY, z) end -- 31. Explosion Shape (ระเบิดสีแดง) Shapes.Explosionv2 = function(i, n, t, r, h, sp) local safeN = math.max(n, 1) -- การระเบิดที่รุนแรง local pulse = 1 + 0.6 * math.sin(t * sp * 4 + i * 0.3) local expand = 1 + 0.3 * math.sin(t * sp * 2) local phi = math.acos(math.clamp(1 - 2 * (i / safeN), -1, 1)) local theta = i * math.pi * (3 - math.sqrt(5)) + t * sp * 3 local currentR = r * pulse * expand * (0.2 + 0.8 * ((i - 1) / safeN)) local x = math.cos(theta) * math.sin(phi) * currentR local y = math.cos(phi) * currentR + h local z = math.sin(theta) * math.sin(phi) * currentR -- เปลี่ยนสี Sparkler เป็นสีแดง (ถ้าต้องการ) -- ต้องไปเพิ่มในโค้ดส่วนอื่น return Vector3.new(x, y, z) end local function GetShapeOffset(index, total, t, cfg) local fn = Shapes[cfg.CurrentShape] if fn then local success, result = pcall(fn, index, total, t, cfg.Radius, cfg.Height, cfg.Speed) if success and result then return result end end local safeTotal = math.max(total, 1) local a = ((index - 1) / safeTotal) * TAU + t * cfg.Speed return Vector3.new(cos(a) * cfg.Radius, cfg.Height, sin(a) * cfg.Radius) end RunService.RenderStepped:Connect(function() local char = LocalPlayer.Character local targetRoot = char and char:FindFirstChild('HumanoidRootPart') if not targetRoot then return end local t = tick() local prediction = targetRoot.AssemblyLinearVelocity * 0.12 local rot = targetRoot.CFrame.Rotation for i = #activeSparklers, 1, -1 do local obj = activeSparklers[i] if obj and obj.Parent then local main = obj:IsA('BasePart') and obj or obj.PrimaryPart local bp = main and main:FindFirstChild('ToyBodyPos') local bg = main and main:FindFirstChild('ToyBodyGyro') if bp and bg then local offset = GetShapeOffset(i, #activeSparklers, t, sparklerConfig) bp.Position = targetRoot.Position + prediction + (rot * offset) bg.CFrame = CFrame.new(main.Position, targetRoot.Position + prediction) end else table.remove(activeSparklers, i) end end end) -- ==================== AIMBOT & TRIGGERBOT TAB ==================== local AimTab = Window:CreateTab("Combat (Aim)", "crosshair") local AimSection = AimTab:CreateSection("Aim Options") local aimbotEnabled = false local triggerbotEnabled = false AimTab:CreateToggle({ Name = "Aimbot", CurrentValue = false, Flag = "Toggle_Aimbot", Callback = function(Value) aimbotEnabled = Value end, }) AimTab:CreateToggle({ Name = "Triggerbot", CurrentValue = false, Flag = "Toggle_Triggerbot", Callback = function(Value) triggerbotEnabled = Value end, }) local function GetClosestPlayer() local closestPlayer = nil local shortestDistance = math.huge for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then local humanoid = player.Character:FindFirstChildOfClass("Humanoid") if humanoid and humanoid.Health > 0 then local pos, onScreen = Camera:WorldToViewportPoint(player.Character.HumanoidRootPart.Position) if onScreen then local magnitude = (Vector2.new(pos.X, pos.Y) - Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2)).Magnitude if magnitude < shortestDistance then shortestDistance = magnitude closestPlayer = player.Character end end end end end return closestPlayer end RunService.RenderStepped:Connect(function() if aimbotEnabled then local target = GetClosestPlayer() if target and target:FindFirstChild("HumanoidRootPart") then Camera.CFrame = CFrame.new(Camera.CFrame.Position, target.HumanoidRootPart.Position) end end if triggerbotEnabled then local mouseTarget = LocalPlayer:GetMouse().Target if mouseTarget and mouseTarget.Parent then local character = mouseTarget.Parent local humanoid = character:FindFirstChildOfClass("Humanoid") if humanoid and Players:GetPlayerFromCharacter(character) and Players:GetPlayerFromCharacter(character) ~= LocalPlayer then if humanoid.Health > 0 then mouse1click() end end end end end)