For context, I’m using a bit of a modified tool system. Instead of connecting the tool to the character’s right arm with a weld (which is how it is in the legacy roblox tool system), my tool connects to a Motor6D located in the character’s torso. I followed @Headstackk 's tutorial to set my tools up like this.
The Issue
Using this modified tool system, whenever a tool is unequipped, then reequipped, the tool will teleport from it’s last position in workspace to the character.
This is a video of the bug:
This is the code segment that attaches an equipped tool to a character. It is in a server script in ServerScriptService:
character.ChildAdded:Connect(function(child)
if child:IsA("Tool") then
local BodyAttach = child:FindFirstChild("BodyAttach", true)
if BodyAttach then
M6D.Part1 = BodyAttach
else
warn(child.Name .. " is not a tool that is compatible for this game: missing BodyAttach part")
end
end
end)
character.ChildRemoved:Connect(function(child)
if child:IsA("Tool") then
M6D.Part1 = nil
end
end)
The reason for this teleporting tool bug is probably because of a delay.
Goal
I want to get rid of this delay to get rid of this bug.
Why don’t you try, instead of assigning Part1 of Motor6D to nil, why don’t you leave it as it was before? Like, not set the Part1 to nil, just let it there
You can try this, since by setting the Motor6D to nil, the tool will stay in the last position where the tool is unequipped.
If this doesn’t work, you can try to move the position of the tool on the torso of the player (or wherever you have it) before assigning the Part1 property of Motor6D.
I have to set the Motor6D to nil when the child is removed just in case the tool is dropped. Also, I tried that solution before, & it doesn’t work when you switch between multiple weapons where the Motor6D’s part1 is changed.
As for setting the position of the tool before assigning it, that’ll probably work, but I’ll need to test it when I get back to my computer.
Ideally, the position that I set the tool to would be the position of the first key frame of that tool an equip animation track. Do you know how to get the position of a specific point in the first key frame of an Animation track?
The latter suggestion did not work unfortunately. The part moves, but you can still see it teleport.
This is how I modified the code segment for testing:
character.ChildAdded:Connect(function(child)
if child:IsA("Tool") then
local BodyAttach : Part = child:FindFirstChild("BodyAttach", true)
if BodyAttach then
----
BodyAttach.Anchored = true
print(BodyAttach.Name)
BodyAttach.CFrame = character:WaitForChild("HumanoidRootPart").CFrame
print(BodyAttach.CFrame)
print(character:FindFirstChild("HumanoidRootPart").CFrame)
task.wait(99999999)
BodyAttach.Anchored = false
----
M6D.Part1 = BodyAttach
else
warn(child.Name .. " is not a tool that is compatible for this game: missing BodyAttach part")
end
end
end)