local ReplicatedStorage = game:GetService("ReplicatedStorage")
local HttpService = game:GetService("HttpService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Debris = game:GetService("Debris")
local GrabEvents = ReplicatedStorage:WaitForChild("GrabEvents")
local MenuToys = ReplicatedStorage:WaitForChild("MenuToys")
local CharacterEvents = ReplicatedStorage:WaitForChild("CharacterEvents")
local SetNetworkOwner = GrabEvents:WaitForChild("SetNetworkOwner")
local Struggle = CharacterEvents:WaitForChild("Struggle")
local CreateLine = GrabEvents:WaitForChild("CreateGrabLine")
local DestroyLine = GrabEvents:WaitForChild("DestroyGrabLine")
local DestroyToy = MenuToys:WaitForChild("DestroyToy")
local localPlayer = Players.LocalPlayer
local playerCharacter = localPlayer.Character or localPlayer.CharacterAdded:Wait()
localPlayer.CharacterAdded:Connect(function(character)
playerCharacter = character
end)
local AutoRecoverDroppedPartsCoroutine
local connectionBombReload
local reloadBombCoroutine
local antiExplosionConnection
local poisonAuraCoroutine
local deathAuraCoroutine
local reloadBombCoroutine
local poisonCoroutines = {}
local strengthConnection
local coroutineRunning = false
local autoStruggleCoroutine
local autoDefendCoroutine
local auraCoroutine
local gravityCoroutine
local kickCoroutine
local kickGrabCoroutine
local hellSendGrabCoroutine
local anchoredParts = {}
local anchoredConnections = {}
local compiledGroups = {}
local compileConnections = {}
local compileCoroutine
local fireAllCoroutine
local connections = {}
local renderSteppedConnections = {}
local ragdollAllCoroutine
local crouchJumpCoroutine
local crouchSpeedCoroutine
local anchorGrabCoroutine
local poisonGrabCoroutine
local ufoGrabCoroutine
local burnPart
local fireGrabCoroutine
local noclipGrabCoroutine
local antiKickCoroutine
local kickGrabConnections = {}
local blobmanCoroutine
local lighBitSpeedCoroutine
local lightbitpos = {}
local lightbitparts = {}
local lightbitcon
local lightbitcon2
local lightorbitcon
local bodyPositions = {}
local alignOrientations = {}
local skolko = ""
local decoyOffset = 15
local stopDistance = 5
local circleRadius = 10
local circleSpeed = 2
local auraToggle = 1
local crouchWalkSpeed = 50
local crouchJumpPower = 50
local kickMode = 1
local auraRadius = 20
local lightbit = 0.3125
local lightbitoffset = 1
local lightbitradius = 20
local usingradius = lightbitradius
local Rayfield = loadstring(game:HttpGet('https://[Log in to view URL]'))()
local Player = game.Players.LocalPlayer
--[[
Utilities.IsDescendantOf(child, parent)
Utilities.GetDescendant(parent, name, className)
Utilities.GetAncestor(child, name, className)
Utilities.FindFirstAncestorOfType(child, className)
Utilities.GetChildrenByType(parent, className)
Utilities.GetDescendantsByType(parent, className)
Utilities.HasAttribute(instance, attributeName)
Utilities.GetAttributeOrDefault(instance, attributeName, defaultValue)
Utilities.CloneInstance(instance, newParent)
Utilities.WaitForChildOfType(parent, className, timeout)
Utilities.IsPointInPart(part, point)
Utilities.GetDistance(pointA, pointB)
Utilities.GetAngleBetweenVectors(vectorA, vectorB)
Utilities.RotateVectorY(vector, angle)
Utilities.GetSurroundingVectors(target, radius, amount, offset)
--]]
local followMode = true
local toysFolder = workspace:FindFirstChild(localPlayer.Name.."SpawnedInToys")
local playerList = {}
local selection
local blobman
local platforms = {}
local ownedToys = {}
local bombList = {}
_G.ToyToLoad = "BombMissile"
_G.MaxMissiles = 9
_G.BlobmanDelay = 0.005
local function isDescendantOf(target, other)
local currentParent = target.Parent
while currentParent do
if currentParent == other then
return true
end
currentParent = currentParent.Parent
end
return false
end
local function DestroyT(toy)
local toy = toy or toysFolder:FindFirstChildWhichIsA("Model")
DestroyToy:FireServer(toy)
end
local function getDescendantParts(descendantName)
local parts = {}
for _, descendant in ipairs(workspace.Map:GetDescendants()) do
if descendant:IsA("Part") and descendant.Name == descendantName then
table.insert(parts, descendant)
end
end
return parts
end
local poisonHurtParts = getDescendantParts("PoisonHurtPart")
local paintPlayerParts = getDescendantParts("PaintPlayerPart")
local function updatePlayerList()
playerList = {}
for _, player in ipairs(Players:GetPlayers()) do
table.insert(playerList, player.Name)
end
end
local function onPlayerAdded(player)
table.insert(playerList, player.Name)
end
local function onPlayerRemoving(player)
for i, name in ipairs(playerList) do
if name == player.Name then
table.remove(playerList, i)
break
end
end
end
Players.PlayerAdded:Connect(onPlayerAdded)
Players.PlayerRemoving:Connect(onPlayerRemoving)
for i, v in pairs(localPlayer:WaitForChild("PlayerGui"):WaitForChild("MenuGui"):WaitForChild("Menu"):WaitForChild("TabContents"):WaitForChild("Toys"):WaitForChild("Contents"):GetChildren()) do
if v.Name ~= "UIGridLayout" then
ownedToys[v.Name] = true
end
end
local function getNearestPlayer()
local nearestPlayer
local nearestDistance = math.huge
for _, player in pairs(Players:GetPlayers()) do
if player ~= localPlayer and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
local distance = (playerCharacter.HumanoidRootPart.Position - player.Character.HumanoidRootPart.Position).Magnitude
if distance < nearestDistance then
nearestDistance = distance
nearestPlayer = player
end
end
end
return nearestPlayer
end
local function cleanupConnections(connectionTable)
for _, connection in ipairs(connectionTable) do
connection:Disconnect()
end
connectionTable = {}
end
local function getVersion()
local url = "https://[Log in to view URL]"
local success, response = pcall(function()
return game:HttpGet(url)
end)
if success then
local data = HttpService:JSONDecode(response)
return data.version
else
warn("Failed to get version: " .. response)
return "Unknown"
end
end
local function spawnItem(itemName, position, orientation)
task.spawn(function()
local cframe = CFrame.new(position)
local rotation = Vector3.new(0, 90, 0)
ReplicatedStorage.MenuToys.SpawnToyRemoteFunction:InvokeServer(itemName, cframe, rotation)
end)
end
local function arson(part)
if not toysFolder:FindFirstChild("Campfire") then
spawnItem("Campfire", Vector3.new(-72.9304581, -5.96906614, -265.543732))
end
local campfire = toysFolder:FindFirstChild("Campfire")
burnPart = campfire:FindFirstChild("FirePlayerPart") or campfire.FirePlayerPart
burnPart.Size = Vector3.new(7, 7, 7)
burnPart.Position = part.Position
task.wait(0.3)
burnPart.Position = Vector3.new(0, -50, 0)
end
local function handleCharacterAdded(player)
local characterAddedConnection = player.CharacterAdded:Connect(function(character)
local hrp = character:WaitForChild("HumanoidRootPart")
local fpp = hrp:WaitForChild("FirePlayerPart")
fpp.Size = Vector3.new(4.5, 5, 4.5)
fpp.CollisionGroup = "1"
fpp.CanQuery = true
end)
table.insert(kickGrabConnections, characterAddedConnection)
end
local function kickGrab()
for _, player in pairs(Players:GetPlayers()) do
if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
local hrp = player.Character.HumanoidRootPart
if hrp:FindFirstChild("FirePlayerPart") then
local fpp = hrp.FirePlayerPart
fpp.Size = Vector3.new(4.5, 5.5, 4.5)
fpp.CollisionGroup = "1"
fpp.CanQuery = true
end
end
handleCharacterAdded(player)
end
local playerAddedConnection = Players.PlayerAdded:Connect(handleCharacterAdded)
table.insert(kickGrabConnections, playerAddedConnection)
end
local function grabHandler(grabType)
while true do
local success, err = pcall(function()
local child = workspace:FindFirstChild("GrabParts")
if child and child.Name == "GrabParts" then
local grabPart = child:FindFirstChild("GrabPart")
local grabbedPart = grabPart:FindFirstChild("WeldConstraint").Part1
local head = grabbedPart.Parent:FindFirstChild("Head")
if head then
while workspace:FindFirstChild("GrabParts") do
local partsTable = grabType == "poison" and poisonHurtParts or paintPlayerParts
for _, part in pairs(partsTable) do
part.Size = Vector3.new(2, 2, 2)
part.Transparency = 1
part.Position = head.Position
end
wait()
for _, part in pairs(partsTable) do
part.Position = Vector3.new(0, -200, 0)
end
end
for _, part in pairs(partsTable) do
part.Position = Vector3.new(0, -200, 0)
end
end
end
end)
wait()
end
end
local function fireGrab()
while true do
local success, err = pcall(function()
local child = workspace:FindFirstChild("GrabParts")
if child and child.Name == "GrabParts" then
local grabPart = child:FindFirstChild("GrabPart")
local grabbedPart = grabPart:FindFirstChild("WeldConstraint").Part1
local head = grabbedPart.Parent:FindFirstChild("Head")
if head then
arson(head)
end
end
end)
wait()
end
end
local function noclipGrab()
while true do
local success, err = pcall(function()
local child = workspace:FindFirstChild("GrabParts")
if child and child.Name == "GrabParts" then
local grabPart = child:FindFirstChild("GrabPart")
local grabbedPart = grabPart:FindFirstChild("WeldConstraint").Part1
local character = grabbedPart.Parent
if character.HumanoidRootPart then
while workspace:FindFirstChild("GrabParts") do
for _, part in pairs(character:GetChildren()) do
if part:IsA("BasePart") then
part.CanCollide = false
end
end
wait()
end
for _, part in pairs(character:GetChildren()) do
if part:IsA("BasePart") then
part.CanCollide = true
end
end
end
end
end)
wait()
end
end
local function spawnItemCf(itemName, cframe)
task.spawn(function()
local rotation = Vector3.new(0, 0, 0)
ReplicatedStorage.MenuToys.SpawnToyRemoteFunction:InvokeServer(itemName, cframe, rotation)
end)
end
local function fireAll()
while true do
local success, err = pcall(function()
if toysFolder:FindFirstChild("Campfire") then
DestroyT(toysFolder:FindFirstChild("Campfire"))
wait(0.5)
end
spawnItemCf("Campfire", playerCharacter.Head.CFrame)
local campfire = toysFolder:WaitForChild("Campfire")
local firePlayerPart
for _, part in pairs(campfire:GetChildren()) do
if part.Name == "FirePlayerPart" then
part.Size = Vector3.new(10, 10, 10)
firePlayerPart = part
break
end
end
local originalPosition = playerCharacter.Torso.Position
SetNetworkOwner:FireServer(firePlayerPart, firePlayerPart.CFrame)
playerCharacter:MoveTo(firePlayerPart.Position)
wait(0.3)
playerCharacter:MoveTo(originalPosition)
local bodyPosition = Instance.new("BodyPosition")
bodyPosition.P = 20000
bodyPosition.Position = playerCharacter.Head.Position + Vector3.new(0, 600, 0)
bodyPosition.Parent = campfire.Main
while true do
for _, player in pairs(Players:GetChildren()) do
pcall(function()
bodyPosition.Position = playerCharacter.Head.Position + Vector3.new(0, 600, 0)
if player.Character and player.Character.HumanoidRootPart and player.Character ~= playerCharacter then
firePlayerPart.Position = player.Character.HumanoidRootPart.Position or player.Character.Head.Position
wait()
end
end)
end
wait()
end
end)
if not success then
warn("Error in fireAll: " .. tostring(err))
end
wait()
end
end
local function createHighlight(parent)
local highlight = Instance.new("Highlight")
highlight.DepthMode = Enum.HighlightDepthMode.Occluded
highlight.FillTransparency = 1
highlight.Name = "Highlight"
highlight.OutlineColor = Color3.new(0, 0, 1)
highlight.OutlineTransparency = 0.5
highlight.Parent = parent
print("created highlight and set on "..parent.Name)
return highlight
end
local function onPartOwnerAdded(descendant, primaryPart)
if descendant.Name == "PartOwner" and descendant.Value ~= localPlayer.Name then
local highlight = primaryPart:FindFirstChild("Highlight") or U.GetDescendant(U.FindFirstAncestorOfType(primaryPart, "Model"), "Highlight", "Highlight")
if highlight then
if descendant.Value ~= localPlayer.Name then
highlight.OutlineColor = Color3.new(1, 0, 0)
else
highlight.OutlineColor = Color3.new(0, 0, 1)
end
end
end
end
local function createBodyMovers(part, position, rotation)
local bodyPosition = Instance.new("BodyPosition")
local bodyGyro = Instance.new("BodyGyro")
bodyPosition.P = 15000
bodyPosition.D = 200
bodyPosition.MaxForce = Vector3.new(5000000, 5000000, 5000000)
bodyPosition.Position = position
bodyPosition.Parent = part
bodyGyro.P = 15000
bodyGyro.D = 200
bodyGyro.MaxTorque = Vector3.new(5000000, 5000000, 5000000)
bodyGyro.CFrame = rotation
bodyGyro.Parent = part
end
local function anchorGrab()
while true do
pcall(function()
local grabParts = workspace:FindFirstChild("GrabParts")
if not grabParts then return end
local grabPart = grabParts:FindFirstChild("GrabPart")
if not grabPart then return end
local weldConstraint = grabPart:FindFirstChild("WeldConstraint")
if not weldConstraint or not weldConstraint.Part1 then return end
local primaryPart = weldConstraint.Part1.Name == "SoundPart" and weldConstraint.Part1 or weldConstraint.Part1.Parent.SoundPart or weldConstraint.Part1.Parent.PrimaryPart or weldConstraint.Part1
if not primaryPart then return end
if primaryPart.Anchored then return end
if isDescendantOf(primaryPart, workspace.Map) then return end
for _, player in pairs(Players:GetChildren()) do
if isDescendantOf(primaryPart, player.Character) then return end
end
local t = true
for _, v in pairs(primaryPart:GetDescendants()) do
if table.find(anchoredParts, v) then
t = false
end
end
if t and not table.find(anchoredParts, primaryPart) then
local target
if U.FindFirstAncestorOfType(primaryPart, "Model") and U.FindFirstAncestorOfType(primaryPart, "Model") ~= workspace then
target = U.FindFirstAncestorOfType(primaryPart, "Model")
else
target = primaryPart
end
local highlight = createHighlight(target)
table.insert(anchoredParts, primaryPart)
print(target)
local connection = target.DescendantAdded:Connect(function(descendant)
onPartOwnerAdded(descendant, primaryPart)
end)
table.insert(anchoredConnections, connection)
end
if U.FindFirstAncestorOfType(primaryPart, "Model") and U.FindFirstAncestorOfType(primaryPart, "Model") ~= workspace then
for _, child in ipairs(U.FindFirstAncestorOfType(primaryPart, "Model"):GetDescendants()) do
if child:IsA("BodyPosition") or child:IsA("BodyGyro") then
child:Destroy()
end
end
else
for _, child in ipairs(primaryPart:GetChildren()) do
if child:IsA("BodyPosition") or child:IsA("BodyGyro") then
child:Destroy()
end
end
end
while workspace:FindFirstChild("GrabParts") do
wait()
end
createBodyMovers(primaryPart, primaryPart.Position, primaryPart.CFrame)
end)
wait()
end
end
local function anchorKickGrab()
while true do
pcall(function()
local grabParts = workspace:FindFirstChild("GrabParts")
if not grabParts then return end
local grabPart = grabParts:FindFirstChild("GrabPart")
if not grabPart then return end
local weldConstraint = grabPart:FindFirstChild("WeldConstraint")
if not weldConstraint or not weldConstraint.Part1 then return end
local primaryPart = weldConstraint.Part1
if not primaryPart then return end
if isDescendantOf(primaryPart, workspace.Map) then return end
if primaryPart.Name ~= "FirePlayerPart" then return end
for _, child in ipairs(primaryPart:GetChildren()) do
if child:IsA("BodyPosition") or child:IsA("BodyGyro") then
child:Destroy()
end
end
while workspace:FindFirstChild("GrabParts") do
wait()
end
createBodyMovers(primaryPart, primaryPart.Position, primaryPart.CFrame)
end)
wait()
end
end
local function cleanupAnchoredParts()
for _, part in ipairs(anchoredParts) do
if part then
if part:FindFirstChild("BodyPosition") then
part.BodyPosition:Destroy()
end
if part:FindFirstChild("BodyGyro") then
part.BodyGyro:Destroy()
end
local highlight = part:FindFirstChild("Highlight") or part.Parent and part.Parent:FindFirstChild("Highlight")
if highlight then
highlight:Destroy()
end
end
end
cleanupConnections(anchoredConnections)
anchoredParts = {}
end
local function updateBodyMovers(primaryPart)
for _, group in ipairs(compiledGroups) do
if group.primaryPart and group.primaryPart == primaryPart then
for _, data in ipairs(group.group) do
local bodyPosition = data.part:FindFirstChild("BodyPosition")
local bodyGyro = data.part:FindFirstChild("BodyGyro")
if bodyPosition then
bodyPosition.Position = (primaryPart.CFrame * data.offset).Position
end
if bodyGyro then
bodyGyro.CFrame = primaryPart.CFrame * data.offset
end
end
end
end
end
local function compileGroup()
if #anchoredParts == 0 then
Rayfield:Notify({Title = "Error",Content = "No anchored parts found",Duration = 5,Image = 4483362458,})
else
Rayfield:Notify({Title = "Success",Content = "Compiled "..#anchoredParts.." Toys together",Duration = 5,Image = 4483362458,})
end
local primaryPart = anchoredParts[1]
if not primaryPart then return end
local highlight = primaryPart:FindFirstChild("Highlight") or primaryPart.Parent:FindFirstChild("Highlight")
if not highlight then
highlight = createHighlight(primaryPart.Parent:IsA("Model") and primaryPart.Parent or primaryPart)
end
highlight.OutlineColor = Color3.new(0, 1, 0)
local group = {}
for _, part in ipairs(anchoredParts) do
if part ~= primaryPart then
local offset = primaryPart.CFrame:toObjectSpace(part.CFrame)
table.insert(group, {part = part, offset = offset})
end
end
table.insert(compiledGroups, {primaryPart = primaryPart, group = group})
local connection = primaryPart:GetPropertyChangedSignal("CFrame"):Connect(function()
updateBodyMovers(primaryPart)
end)
table.insert(compileConnections, connection)
local renderSteppedConnection = RunService.Heartbeat:Connect(function()
updateBodyMovers(primaryPart)
end)
table.insert(renderSteppedConnections, renderSteppedConnection)
end
local function cleanupCompiledGroups()
for _, groupData in ipairs(compiledGroups) do
for _, data in ipairs(groupData.group) do
if data.part then
if data.part:FindFirstChild("BodyPosition") then
data.part.BodyPosition:Destroy()
end
if data.part:FindFirstChild("BodyGyro") then
data.part.BodyGyro:Destroy()
end
end
end
if groupData.primaryPart and groupData.primaryPart.Parent then
local highlight = groupData.primaryPart:FindFirstChild("Highlight") or groupData.primaryPart.Parent:FindFirstChild("Highlight")
if highlight then
highlight:Destroy()
end
end
end
cleanupConnections(compileConnections)
cleanupConnections(renderSteppedConnections)
compiledGroups = {}
end
local function compileCoroutineFunc()
while true do
pcall(function()
for _, groupData in ipairs(compiledGroups) do
updateBodyMovers(groupData.primaryPart)
end
end)
wait()
end
end
local function unanchorPrimaryPart()
local primaryPart = anchoredParts[1]
if not primaryPart then return end
if primaryPart:FindFirstChild("BodyPosition") then
primaryPart.BodyPosition:Destroy()
end
if primaryPart:FindFirstChild("BodyGyro") then
primaryPart.BodyGyro:Destroy()
end
local highlight = primaryPart.Parent:FindFirstChild("Highlight") or primaryPart:FindFirstChild("Highlight")
if highlight then
highlight:Destroy()
end
end
local function recoverParts()
while true do
local success, err = pcall(function()
local character = localPlayer.Character
if character and character:FindFirstChild("Head") and character:FindFirstChild("HumanoidRootPart") then
local head = character.Head
local humanoidRootPart = character.HumanoidRootPart
for _, partModel in pairs(anchoredParts) do
coroutine.wrap(function()
if partModel then
local distance = (partModel.Position - humanoidRootPart.Position).Magnitude
if distance <= 30 then
local highlight = partModel:FindFirstChild("Highlight") or partModel.Parent:FindFirstChild("Highlight")
if highlight and highlight.OutlineColor == Color3.new(1, 0, 0) then
SetNetworkOwner:FireServer(partModel, partModel.CFrame)
if partModel:WaitForChild("PartOwner") and partModel.PartOwner.Value == localPlayer.Name then
highlight.OutlineColor = Color3.new(0, 0, 1)
print("yoyoyo set and r eady")
end
end
end
end
end)()
end
end
end)
wait(0.02)
end
end
local function ragdollAll()
while true do
local success, err = pcall(function()
if not toysFolder:FindFirstChild("FoodBanana") then
spawnItem("FoodBanana", Vector3.new(-72.9304581, -5.96906614, -265.543732))
end
local banana = toysFolder:WaitForChild("FoodBanana")
local bananaPeel
for _, part in pairs(banana:GetChildren()) do
if part.Name == "BananaPeel" and part:FindFirstChild("TouchInterest") then
part.Size = Vector3.new(10, 10, 10)
part.Transparency = 1
bananaPeel = part
break
end
end
local bodyPosition = Instance.new("BodyPosition")
bodyPosition.P = 20000
bodyPosition.Parent = banana.Main
while true do
for _, player in pairs(Players:GetChildren()) do
pcall(function()
if player.Character and player.Character ~= playerCharacter then
bananaPeel.Position = player.Character.HumanoidRootPart.Position or player.Character.Head.Position
bodyPosition.Position = playerCharacter.Head.Position + Vector3.new(0, 600, 0)
wait()
end
end)
end
wait()
end
end)
if not success then
warn("Error in ragdollAll: " .. tostring(err))
end
wait()
end
end
local function reloadMissile(bool)
if bool then
if not ownedToys[_G.ToyToLoad] then
Rayfield:Notify({
Title = "Missing toy",
Content = "You do not own the ".._G.ToyToLoad.." toy.",
Duration = 3,
Image = 4483362458,
})
return
end
if not reloadBombCoroutine then
reloadBombCoroutine = coroutine.create(function()
connectionBombReload = toysFolder.ChildAdded:Connect(function(child)
if child.Name == _G.ToyToLoad and child:WaitForChild("ThisToysNumber", 1) then
if child.ThisToysNumber.Value == (toysFolder.ToyNumber.Value - 1) then
local connection2
connection2 = toysFolder.ChildRemoved:Connect(function(child2)
if child2 == child then
connection2:Disconnect()
end
end)
SetNetworkOwner:FireServer(child.Body, child.Body.CFrame)
local waiting = child.Body:WaitForChild("PartOwner", 0.5)
local connection = child.DescendantAdded:Connect(function(descendant)
if descendant.Name == "PartOwner" then
if descendant.Value ~= localPlayer.Name then
DestroyT(child)
connection:Disconnect()
end
end
end)
Debris:AddItem(connectio, 60)
if waiting and waiting.Value == localPlayer.Name then
for _, v in pairs(child:GetChildren()) do
if v:IsA("BasePart") then
v.CanCollide = false
end
end
child:SetPrimaryPartCFrame(CFrame.new(-72.9304581, -3.96906614, -265.543732))
wait(0.2)
for _, v in pairs(child:GetChildren()) do
if v:IsA("BasePart") then
v.Anchored = true
end
end
table.insert(bombList, child)
child.AncestryChanged:Connect(function()
if not child.Parent then
for i, bomb in ipairs(bombList) do
if bomb == child then
table.remove(bombList, i)
break
end
end
end
end)
connection2:Disconnect()
else
DestroyT(child)
end
end
end
end)
while true do
if localPlayer.CanSpawnToy and localPlayer.CanSpawnToy.Value and #bombList < _G.MaxMissiles and playerCharacter:FindFirstChild("Head") then
spawnItemCf(_G.ToyToLoad, playerCharacter.Head.CFrame or playerCharacter.HumanoidRootPart.CFrame)
end
RunService.Heartbeat:Wait()
end
end)
coroutine.resume(reloadBombCoroutine)
end
else
if reloadBombCoroutine then
coroutine.close(reloadBombCoroutine)
reloadBombCoroutine = nil
end
if connectionBombReload then
connectionBombReload:Disconnect()
end
end
end
local function setupAntiExplosion(character)
local partOwner = character:WaitForChild("Humanoid"):FindFirstChild("Ragdolled")
if partOwner then
local partOwnerChangedConn
partOwnerChangedConn = partOwner:GetPropertyChangedSignal("Value"):Connect(function()
if partOwner.Value then
for _, part in ipairs(character:GetChildren()) do
if part:IsA("BasePart") then
part.Anchored = true
end
end
else
for _, part in ipairs(character:GetChildren()) do
if part:IsA("BasePart") then
part.Anchored = false
end
end
end
end)
antiExplosionConnection = partOwnerChangedConn
end
end
local blobalter = 1
local function blobGrabPlayer(player, blobman)
if blobalter == 1 then
if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
local args = {
[1] = blobman:FindFirstChild("LeftDetector"),
[2] = player.Character:FindFirstChild("HumanoidRootPart"),
[3] = blobman:FindFirstChild("LeftDetector"):FindFirstChild("LeftWeld")
}
blobman:WaitForChild("BlobmanSeatAndOwnerScript"):WaitForChild("CreatureGrab"):FireServer(unpack(args))
blobalter = 2
end
else
if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
local args = {
[1] = blobman:FindFirstChild("RightDetector"),
[2] = player.Character:FindFirstChild("HumanoidRootPart"),
[3] = blobman:FindFirstChild("RightDetector"):FindFirstChild("RightWeld")
}
blobman:WaitForChild("BlobmanSeatAndOwnerScript"):WaitForChild("CreatureGrab"):FireServer(unpack(args))
blobalter = 1
end
end
end
local version = getVersion()
local whitelistIdsStr = game:HttpGet("https://[Log in to view URL]")
local whitelistIdsTbl = HttpService:JSONDecode(whitelistIdsStr)
local whitelistIds = {}
for id, _ in pairs(whitelistIdsTbl) do
if tonumber(id) then
table.insert(whitelistIds, tonumber(id))
print(id)
end
end
local isWhitelisted = false
for _, v in pairs(whitelistIds) do
if v == localPlayer.UserId then
isWhitelisted = true
break
end
end
local localVersion = "8.2-stable"
if localVersion ~= version then
Rayfield:Notify({Title = "Venom X",Content = "Script.Ftap",Duration = 6.5,Image = 4483362458,})
setclipboard('loadstring(game:HttpGet("https://[Log in to view URL]",true))()')
wait(12)
Rayfield:Destroy()
wait(9e9)
end
local Window = Rayfield:CreateWindow({
Name = "Venom X",
Icon = 0, -- Icon in Topbar. Can use Lucide Icons (string) or Roblox Image (number). 0 to use no icon (default).
LoadingTitle = "Venom X Loaded",
LoadingSubtitle = "by Chill and NovaX",
Theme = "Default", -- Check https://[Log in to view URL]
DisableRayfieldPrompts = false,
DisableBuildWarnings = false, -- Prevents Rayfield from warning when the script has a version mismatch with the interface
ConfigurationSaving = {
Enabled = true,
FolderName = nil, -- Create a custom folder for your hub/game
FileName = "VenomX"
},
Discord = {
Enabled = false, -- Prompt the user to join your Discord server if their executor supports it
Invite = "noinvitelink", -- The Discord invite code, do not include discord.gg/. E.g. discord.gg/ ABCD would be ABCD
RememberJoins = true -- Set this to false to make them join the discord every time they load it up
},
KeySystem = false, -- Set this to true to use our key system
KeySettings = {
Title = "Untitled",
Subtitle = "Key System",
Note = "No method of obtaining the key is provided", -- Use this to tell the user how to get a key
FileName = "Key", -- It is recommended to use something unique as other scripts using Rayfield may overwrite your key file
SaveKey = true, -- The user's key will be saved, but if you change the key, they will be unable to use your script
GrabKeyFromSite = false, -- If this is true, set Key below to the RAW site you would like Rayfield to get the key from
Key = {"Hello"} -- List of keys that will be accepted by the system, can be RAW file links (pastebin, github etc) or simple strings ("hello","key22")
}
})
local homeTab = Window:CreateTab("Home", 10723407389)
local GrabTab = Window:CreateTab("Combat", 10723404472)
local PlayerTab = Window:CreateTab("Local Player", 10747373176)
local ObjectGrabTab = Window:CreateTab("Object Grab", 10709782497)
local DefanseTab = Window:CreateTab("Anti Grab", 10734951847)
local BlobmanTab = Window:CreateTab("Blob Man", 10709782230)
local FunTab = Window:CreateTab("Fun / Troll", 10734964441)
local ScriptTab = Window:CreateTab("Script", 10734943448)
local AuraTab = Window:CreateTab("Auras", 10723396107)
local ExplosionTab = Window:CreateTab("Explosions", 10709818996)
local KeybindsTab = Window:CreateTab("Keybinds", 10723416765)
local Paragraph = homeTab:CreateParagraph({Title = "UI / Rayfield", Content = "Rayfield library by sirius"})
local Divider = homeTab:CreateDivider()
local Paragraph = homeTab:CreateParagraph({Title = "Home!", Content = "Welcome to Venom X! "..Player.Name.." Thanks for useing script!"})
local Label = homeTab:CreateLabel("Chill Server / Discord", 10709797725, Color3.fromRGB(10, 10, 10), false) -- Title, Icon, Color, IgnoreTheme
local Button = homeTab:CreateButton({
Name = "Chill Server",
Callback = function()
setclipboard("discord.gg/BKU2WH7evF")
end,
})
local Paragraph = homeTab:CreateParagraph({Title = "Info Log", Content = "Script Update log and Discord Update log"})
local Divider = homeTab:CreateDivider()
local Paragraph = homeTab:CreateParagraph({Title = "[Script Update]", Content = "[2025/02/19] | Added Get Coin"})
local Paragraph = homeTab:CreateParagraph({Title = "[Script Update]", Content = "[2025/02/20] | Added Key System"})
_G.strength = 400
local Paragraph = GrabTab:CreateParagraph({Title = "Combat Tab", Content = "Adjust the throwing force along the slider"})
local Slider = GrabTab:CreateSlider({
Name = "Strength Power",
Range = {300, 10000},
Increment = 1,
Suffix = "",
CurrentValue = 300,
Flag = "StrengthSlider",
Callback = function(Value)
_G.strength = Value
end,
})
local Toggle = GrabTab:CreateToggle({
Name = "Strength",
CurrentValue = false,
Flag = "StrengthToggle",
Callback = function(enabled)
if enabled then
strengthConnection = workspace.ChildAdded:Connect(function(model)
if model.Name == "GrabParts" then
local partToImpulse = model.GrabPart.WeldConstraint.Part1
if partToImpulse then
local velocityObj = Instance.new("BodyVelocity", partToImpulse)
model:GetPropertyChangedSignal("Parent"):Connect(function()
if not model.Parent then
if UserInputService:GetLastInputType() == 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
end)
elseif strengthConnection then
strengthConnection:Disconnect()
end
end
})
local Paragraph = GrabTab:CreateParagraph({Title = "Grab stuff", Content = "These effects apply when you grab someone"})
local Toggle = GrabTab:CreateToggle({
Name = "Poison Grab",
CurrentValue = false,
Flag = "",
Callback = function(enabled)
if enabled then
poisonGrabCoroutine = coroutine.create(function() grabHandler("poison") end)
coroutine.resume(poisonGrabCoroutine)
else
if poisonGrabCoroutine then
coroutine.close(poisonGrabCoroutine)
poisonGrabCoroutine = nil
for _, part in pairs(poisonHurtParts) do
part.Position = Vector3.new(0, -200, 0)
end
end
end
end
})
local Toggle = GrabTab:CreateToggle({
Name = "Radioactive Grab",
CurrentValue = false,
Flag = "RadioactiveGrab",
Callback = function(enabled)
if enabled then
ufoGrabCoroutine = coroutine.create(function() grabHandler("radioactive") end)
coroutine.resume(ufoGrabCoroutine)
else
if ufoGrabCoroutine then
coroutine.close(ufoGrabCoroutine)
ufoGrabCoroutine = nil
for _, part in pairs(paintPlayerParts) do
part.Position = Vector3.new(0, -200, 0)
end
end
end
end
})
local Toggle = GrabTab:CreateToggle({
Name = "Fire Grab",
CurrentValue = false,
Flag = "FireGrab",
Callback = function(enabled)
if enabled then
fireGrabCoroutine = coroutine.create(fireGrab)
coroutine.resume(fireGrabCoroutine)
else
if fireGrabCoroutine then
coroutine.close(fireGrabCoroutine)
fireGrabCoroutine = nil
end
end
end
})
local Toggle = GrabTab:CreateToggle({
Name = "Noclip Grab",
CurrentValue = false,
Flag = "NoclipGrab",
Callback = function(enabled)
if enabled then
noclipGrabCoroutine = coroutine.create(noclipGrab)
coroutine.resume(noclipGrabCoroutine)
else
if noclipGrabCoroutine then
coroutine.close(noclipGrabCoroutine)
noclipGrabCoroutine = nil
end
end
end
})
local Toggle = GrabTab:CreateToggle({
Name = "Kick Grab",
CurrentValue = false,
Flag = "KickGrab",
Callback = function(enabled)
if enabled then
kickGrab()
else
for _, connection in pairs(kickGrabConnections) do
connection:Disconnect()
end
for _, player in pairs(Players:GetPlayers()) do
if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
local hrp = player.Character.HumanoidRootPart
if hrp:FindFirstChild("FirePlayerPart") then
local fpp = hrp.FirePlayerPart
fpp.Size = Vector3.new(2.5, 5.5, 2.5)
fpp.CollisionGroup = "Default"
fpp.CanQuery = false
end
end
end
kickGrabConnections = {}
end
end
})
local Toggle = GrabTab:CreateToggle({
Name = "Kick Grab Anchor",
CurrentValue = false,
Flag = "AnchorKickGrab",
Callback = function(enabled)
if enabled then
if not anchorKickCoroutine or coroutine.status(anchorKickCoroutine) == "dead" then
anchorKickCoroutine = coroutine.create(anchorKickGrab)
coroutine.resume(anchorKickCoroutine)
end
else
if anchorKickCoroutine and coroutine.status(anchorKickCoroutine) ~= "dead" then
coroutine.close(anchorKickCoroutine)
anchorKickCoroutine = nil
end
end
end
})
local Paragraph = GrabTab:CreateParagraph({Title = "All-Features", Content = "Make sure there are no campfires spawned by you BEFORE using this"})
local Toggle = GrabTab:CreateToggle({
Name = "Fire All",
CurrentValue = false,
Flag = "FireAll",
Callback = function(enabled)
if enabled then
fireAllCoroutine = coroutine.create(fireAll)
coroutine.resume(fireAllCoroutine)
else
if fireAllCoroutine then
coroutine.close(fireAllCoroutine)
fireAllCoroutine = nil
end
end
end
})
local Paragraph = PlayerTab:CreateParagraph({Title = "Local Player Tab", Content = "Player Setting"})
local Toggle = PlayerTab:CreateToggle({
Name = "Crouch Speed",
CurrentValue = false,
Flag = "CrouchSpeed",
Callback = function(enabled)
if enabled then
crouchSpeedCoroutine = coroutine.create(function()
while true do
pcall(function()
if not playerCharacter.Humanoid then return end
if playerCharacter.Humanoid.WalkSpeed == 5 then
playerCharacter.Humanoid.WalkSpeed = crouchWalkSpeed
end
end)
wait()
end
end)
coroutine.resume(crouchSpeedCoroutine)
elseif crouchSpeedCoroutine then
coroutine.close(crouchSpeedCoroutine)
crouchSpeedCoroutine = nil
if playerCharacter.Humanoid then
playerCharacter.Humanoid.WalkSpeed = 16
end
end
end
})
local Slider = PlayerTab:CreateSlider({
Name = "Set Crouch Speed",
Range = {6, 1000},
Increment = 1,
Suffix = "SetCrouchSpeed",
CurrentValue = 300,
Flag = "StrengthSlider",
Callback = function(Value)
crouchWalkSpeed = Value
end
})
local Toggle = PlayerTab:CreateToggle({
Name = "Crouch Jump Power",
CurrentValue = false,
Flag = "CrouchJumpPower",
Callback = function(enabled)
if enabled then
crouchJumpCoroutine = coroutine.create(function()
while true do
pcall(function()
if not playerCharacter.Humanoid then return end
if playerCharacter.Humanoid.JumpPower == 12 then
playerCharacter.Humanoid.JumpPower = crouchJumpPower
end
end)
wait()
end
end)
coroutine.resume(crouchJumpCoroutine)
elseif crouchJumpCoroutine then
coroutine.close(crouchJumpCoroutine)
crouchJumpCoroutine = nil
if playerCharacter.Humanoid then
playerCharacter.Humanoid.JumpPower = 24
end
end
end
})
local Slider = PlayerTab:CreateSlider({
Name = "Set Crouch Jump Power",
Range = {6, 1000},
Increment = 1,
Suffix = "SetCrouchJumpPower",
CurrentValue = 300,
Flag = "StrengthSlider",
Callback = function(Value)
crouchJumpPower = Value
end
})
local Paragraph = ObjectGrabTab:CreateParagraph({Title = "ObjectGrab Tab", Content = "Function when grabbing an object"})
local Toggle = ObjectGrabTab:CreateToggle({
Name = "Anchor Grab",
CurrentValue = false,
Flag = "AnchorGrab",
Callback = function(enabled)
if enabled then
if not anchorGrabCoroutine or coroutine.status(anchorGrabCoroutine) == "dead" then
anchorGrabCoroutine = coroutine.create(anchorGrab)
coroutine.resume(anchorGrabCoroutine)
end
else
if anchorGrabCoroutine and coroutine.status(anchorGrabCoroutine) ~= "dead" then
coroutine.close(anchorGrabCoroutine)
anchorGrabCoroutine = nil
end
end
end
})
local Paragraph = ObjectGrabTab:CreateParagraph({Title = "Anchor Grab Info", Content = "If someone grabs your anchored parts, they will fall and you will need to position them again!"})
local Button = ObjectGrabTab:CreateButton({
Name = "Unanchor parts",
Callback = cleanupAnchoredParts
})
local Button = ObjectGrabTab:CreateButton({
Name = "Disassemble Parts",
Callback = function()
cleanupCompiledGroups()
cleanupAnchoredParts()
if compileCoroutine and coroutine.status(compileCoroutine) ~= "dead" then
coroutine.close(compileCoroutine)
compileCoroutine = nil
end
end
})
local Toggle = ObjectGrabTab:CreateToggle({
Name = "Auto Recover Dropped Parts",
CurrentValue = false,
Flag = "AutoRecoverDroppedParts",
Callback = function(enabled)
if enabled then
if not AutoRecoverDroppedPartsCoroutine or coroutine.status(AutoRecoverDroppedPartsCoroutine) == "dead" then
AutoRecoverDroppedPartsCoroutine = coroutine.create(recoverParts)
coroutine.resume(AutoRecoverDroppedPartsCoroutine)
end
else
if AutoRecoverDroppedPartsCoroutine and coroutine.status(AutoRecoverDroppedPartsCoroutine) ~= "dead" then
coroutine.close(AutoRecoverDroppedPartsCoroutine)
AutoRecoverDroppedPartsCoroutine = nil
end
end
end
})
local Button = ObjectGrabTab:CreateButton({
Name = "Unanchor Header Part",
Callback = unanchorPrimaryPart
})
local Paragraph = DefanseTab:CreateParagraph({Title = "Defense Tab", Content = "Anti System"})
local Toggle = DefanseTab:CreateToggle({
Name = "Anti Grab",
CurrentValue = false,
Flag = "AutoStruggle",
Callback = function(enabled)
if enabled then
autoStruggleCoroutine = RunService.Heartbeat:Connect(function()
local character = localPlayer.Character
if character and character:FindFirstChild("Head") then
local head = character.Head
local partOwner = head:FindFirstChild("PartOwner")
if partOwner then
Struggle:FireServer()
ReplicatedStorage.GameCorrectionEvents.StopAllVelocity:FireServer()
for _, part in pairs(character:GetChildren()) do
if part:IsA("BasePart") then
part.Anchored = true
end
end
while localPlayer.IsHeld.Value do
wait()
end
for _, part in pairs(character:GetChildren()) do
if part:IsA("BasePart") then
part.Anchored = false
end
end
end
end
end)
else
if autoStruggleCoroutine then
autoStruggleCoroutine:Disconnect()
autoStruggleCoroutine = nil
end
end
end
})
local Toggle = DefanseTab:CreateToggle({
Name = "Anti Kick Grab",
CurrentValue = false,
Flag = "AntiKickGrab",
Callback = function(enabled)
if enabled then
local character = localPlayer.Character
antiKickCoroutine = RunService.Heartbeat:Connect(function()
local character = localPlayer.Character
if character and character:FindFirstChild("HumanoidRootPart") and character:FindFirstChild("HumanoidRootPart"):FindFirstChild("FirePlayerPart") then
local partOwner = character:FindFirstChild("HumanoidRootPart"):FindFirstChild("FirePlayerPart"):FindFirstChild("PartOwner")
if partOwner and partOwner.Value ~= localPlayer.Name then
local args = {[1] = character:WaitForChild("HumanoidRootPart"), [2] = 0}
game:GetService("ReplicatedStorage"):WaitForChild("CharacterEvents"):WaitForChild("RagdollRemote"):FireServer(unpack(args))
print("grabbity shap!")
wait(0.1)
Struggle:FireServer()
end
end
end)
else
if antiKickCoroutine then
antiKickCoroutine:Disconnect()
antiKickCoroutine = nil
end
end
end
})
local Toggle = DefanseTab:CreateToggle({
Name = "Anti Explosion",
CurrentValue = false,
Flag = "AntiExplosion",
Callback = function(enabled)
local localPlayer = game.Players.LocalPlayer
if enabled then
if localPlayer.Character then
setupAntiExplosion(localPlayer.Character)
end
characterAddedConn = localPlayer.CharacterAdded:Connect(function(character)
if antiExplosionConnection then
antiExplosionConnection:Disconnect()
end
setupAntiExplosion(character)
end)
else
if antiExplosionConnection then
antiExplosionConnection:Disconnect()
antiExplosionConnection = nil
end
if characterAddedConn then
characterAddedConn:Disconnect()
characterAddedConn = nil
end
end
end
})
local Section = DefanseTab:CreateSection("Self Defense")
local Toggle = DefanseTab:CreateToggle({
Name = "Self Defense / Air Suspend",
CurrentValue = false,
Flag = "SelfDefenseAirSuspend",
Callback = function(enabled)
if enabled then
autoDefendCoroutine = coroutine.create(function()
while wait(0.02) do
local character = localPlayer.Character
if character and character:FindFirstChild("Head") then
local head = character.Head
local partOwner = head:FindFirstChild("PartOwner")
if partOwner then
local attacker = Players:FindFirstChild(partOwner.Value)
if attacker and attacker.Character then
Struggle:FireServer()
SetNetworkOwner:FireServer(attacker.Character.Head or attacker.Character.Torso, attacker.Character.HumanoidRootPart.FirePlayerPart.CFrame)
task.wait(0.1)
local target = attacker.Character:FindFirstChild("Torso")
if target then
local velocity = target:FindFirstChild("l") or Instance.new("BodyVelocity")
velocity.Name = "l"
velocity.Parent = target
velocity.Velocity = Vector3.new(0, 50, 0)
velocity.MaxForce = Vector3.new(0, math.huge, 0)
Debris:AddItem(velocity, 100)
end
end
end
end
end
end)
coroutine.resume(autoDefendCoroutine)
else
if autoDefendCoroutine then
coroutine.close(autoDefendCoroutine)
autoDefendCoroutine = nil
end
end
end
})
local Toggle = DefanseTab:CreateToggle({
Name = "Self Defense / Kick Silent",
CurrentValue = false,
Flag = "",
Callback = function(enabled)
end
})
local Paragraph = BlobmanTab:CreateParagraph({Title = "Blobman Tab", Content = "Destroy server More added? Send DM For My acc"})
local blobman1
blobman1 = BlobmanTab:CreateToggle({
Name = "Destroy server",
CurrentValue = false,
Flag = "",
Callback = function(enabled)
if enabled then
print("Toggle enabled")
blobmanCoroutine = coroutine.create(function()
local foundBlobman = false
for i, v in pairs(game.Workspace:GetDescendants()) do
if v.Name == "CreatureBlobman" then
print("Found CreatureBlobman")
if v:FindFirstChild("VehicleSeat") and v.VehicleSeat:FindFirstChild("SeatWeld") and isDescendantOf(v.VehicleSeat.SeatWeld.Part1, localPlayer.Character) then
print("Mounted on blobman")
blobman = v
foundBlobman = true
break
end
end
end
print("Out of the loop!")
if not foundBlobman then
print("No mount found")
Rayfield:Notify({
Title = "Error",
Content = "You must be mounted upon a blobman to begin this process. Please mount one and toggle this again!",
Duration = 3,
Image = 4483362458,
})
blobman1:Set(false)
blobman = nil
coroutine.close(blobmanCoroutine)
blobmanCoroutine = nil
return
end
while true do
pcall(function()
while wait() do
for i, v in pairs(Players:GetChildren()) do
if blobman and v ~= localPlayer then
blobGrabPlayer(v, blobman)
print(v.Name)
wait(_G.BlobmanDelay)
end
end
end
end)
wait(0.02)
end
end)
coroutine.resume(blobmanCoroutine)
else
if blobmanCoroutine then
coroutine.close(blobmanCoroutine)
blobmanCoroutine = nil
blobman = nil
end
end
end
})
local Slider = BlobmanTab:CreateSlider({
Name = "Destroy server Speed",
Range = {0.05, 1},
Increment = 0.01,
Suffix = "",
CurrentValue = 0.5,
Flag = "Slider1",
Callback = function(Value)
_G.BlobmanDelay = Value
end,
})
local Paragraph = FunTab:CreateParagraph({Title = "Fun Tab", Content = "Troll and Fun!"})
local Section = FunTab:CreateSection("Troll")
local Input = FunTab:CreateInput({
Name = "Number of coins",
CurrentValue = "",
PlaceholderText = "Number",
RemoveTextAfterFocusLost = false,
Flag = "Coin",
Callback = function(Text)
skolko = Text
end,
})
local Button = FunTab:CreateButton({
Name = "Get Coin",
Callback = function()
local coinAmount = tonumber(skolko) or 0
game.Players.LocalPlayer.PlayerGui.MenuGui.TopRight.CoinsFrame.CoinsDisplay.Coins.Text = tostring(coinAmount)
end,
})
local Section = FunTab:CreateSection("Fun")
local Slider = FunTab:CreateSlider({
Name = "Offset",
Range = {1, 10},
Increment = 5,
Suffix = "",
CurrentValue = 10,
Flag = "",
Callback = function(Value)
decoyOffset = Value
end
})
local Input = FunTab:CreateInput({
Name = "Circle Radius",
CurrentValue = "",
PlaceholderText = "Radius for Surround Mode (Adjust based on clones)",
RemoveTextAfterFocusLost = false,
Flag = "",
Callback = function(Value)
circleRadius = tonumber(Value) or 10
end,
})
local Button = FunTab:CreateButton({
Name = "Decoy Follow",
Callback = function()
local decoys = {}
for _, descendant in pairs(workspace:GetDescendants()) do
if descendant:IsA("Model") and descendant.Name == "YouDecoy" then
table.insert(decoys, descendant)
end
end
local numDecoys = #decoys
local midPoint = math.ceil(numDecoys / 2)
local function updateDecoyPositions()
for index, decoy in pairs(decoys) do
local torso = decoy:FindFirstChild("Torso")
if torso then
local bodyPosition = torso:FindFirstChild("BodyPosition")
local bodyGyro = torso:FindFirstChild("BodyGyro")
if bodyPosition and bodyGyro then
local targetPosition
if followMode then
if playerCharacter and playerCharacter:FindFirstChild("HumanoidRootPart") then
targetPosition = playerCharacter.HumanoidRootPart.Position
local offset = (index - midPoint) * decoyOffset
local forward = playerCharacter.HumanoidRootPart.CFrame.LookVector
local right = playerCharacter.HumanoidRootPart.CFrame.RightVector
targetPosition = targetPosition - forward * decoyOffset + right * offset
end
else
local nearestPlayer = getNearestPlayer()
if nearestPlayer and nearestPlayer.Character and nearestPlayer.Character:FindFirstChild("HumanoidRootPart") then
local angle = math.rad((index - 1) * (360 / numDecoys))
targetPosition = nearestPlayer.Character.HumanoidRootPart.Position + Vector3.new(math.cos(angle) * circleRadius, 0, math.sin(angle) * circleRadius)
bodyGyro.CFrame = CFrame.new(torso.Position, nearestPlayer.Character.HumanoidRootPart.Position)
end
end
if targetPosition then
local distance = (targetPosition - torso.Position).Magnitude
if distance > stopDistance then
bodyPosition.Position = targetPosition
if followMode then
bodyGyro.CFrame = CFrame.new(torso.Position, targetPosition)
end
else
bodyPosition.Position = torso.Position
bodyGyro.CFrame = torso.CFrame
end
end
end
end
end
end
local function setupDecoy(decoy)
local torso = decoy:FindFirstChild("Torso")
if torso then
local bodyPosition = Instance.new("BodyPosition")
local bodyGyro = Instance.new("BodyGyro")
bodyPosition.Parent = torso
bodyGyro.Parent = torso
bodyPosition.MaxForce = Vector3.new(40000, 40000, 40000)
bodyPosition.D = 100
bodyPosition.P = 100
bodyGyro.MaxTorque = Vector3.new(40000, 40000, 40000)
bodyGyro.D = 100
bodyGyro.P = 20000
local connection = RunService.Heartbeat:Connect(function()
updateDecoyPositions()
end)
table.insert(connections, connection)
SetNetworkOwner:FireServer(torso, playerCharacter.Head.CFrame)
end
end
for _, decoy in pairs(decoys) do
setupDecoy(decoy)
end
Rayfield:Notify({Title = "Notification",Content = "Got "..numDecoys.." units. Manually click each unit if they don't move", Duration = 6.5,Image = 4483362458,})
end
})
local Button = FunTab:CreateButton({
Name = "Toggle Mode",
Callback = function()
followMode = not followMode
end,
})
FunTab:AddButton({
Name = "Disconnect Clones",
Callback = cleanupConnections(connections)
})
To embed this project on your website, copy the following code and paste it into your website's HTML: