I am working on a Roblox game where I need to clone an object and allow players to pick up the cloned object after it has been thrown. However, I am facing an issue where the cloned object cannot be picked up.
Here is my local script for throwing
local userInputService = game:GetService("UserInputService") local playersService = game:GetService("Players") local tool = script.Parent.Parent local humanoid = playersService.LocalPlayer.Character:WaitForChild("Humanoid") local workspace = game:GetService("Workspace") local isEquipped = false local mouse = playersService.LocalPlayer:GetMouse() local function createToolCopy() local toolCopy = tool:Clone() toolCopy.Parent = workspace local throwDirection = (mouse.Hit.p - toolCopy.Handle.Position).unit local throwForce = 100 toolCopy.Handle.Velocity = throwDirection * throwForce isEquipped = false tool:Destroy() end tool.Equipped:Connect( function() isEquipped = true end) tool.Unequipped:Connect(function() isEquipped = false end) userInputService.InputBegan:Connect(function(input, gameProcessedEvent) if isEquipped and not gameProcessedEvent then if input.UserInputType == Enum.UserInputType.MouseButton1 then createToolCopy() end end end)
This is my global script for for picking up the cup
local clickDetector = script.Parent local tool = clickDetector.Parent if clickDetector then clickDetector.MaxActivationDistance = 10 clickDetector.MouseClick:Connect(function(playerWhoClicked: Player) print("Player clicked the clickDetector") tool.Parent = playerWhoClicked.Backpack end) else warn("clickDetector not found in the object.") end
I also provide for a general understanding of the situation, this is struct of cup:
├─ clickDetector/ │ ├─ GlobalScriptForPickUp │ ├─ LocalScriptForThrowing ├─ ModelOfCup ├─ Handle/ │ ├─ TouchInterest │ ├─ WeldConstraint
I wanted it to be like this: the player picks up the cup -> picks it up -> right mouse button -> the cup in the inventory is cloned into the workspace -> flies -> disappears from the inventory -> the player runs up to the cloned cup and can throw it again (although in the future I would like to make a system throwing force depending on the length of the press, and if the force is greater than a certain value, then the cup will break)
What happened: All of the above steps were completed, except for the last one, which is why I wrote the post
This is a typical script that would have worked in Filtering Disabled. Though since the introduction of Filtering Enabled only, the server filters what the client can do. So it is now not possible for clients to create serverscripts (in your case global scripts) anymore, as they would be able to affect other clients too.
Since a localscript and therefore a client creates a new tool that includes a serverscript, the server won't detect that serverscript was made by the client, as it isn't replicated to the server, neither the tool.
Consider using RemoteEvents to communicate between the client and server.
I suggest for you to seperate the detection of tool activation on the client and the rest on the sever (e.g. throwing tool and cloning it)