This occurs whether I make the welds before the tool is equipped, or during the equip of the tool.
There are 8 parts in all, two are welded onto the arms as gauntlets (This works perfectly fine). Then, I have 6 parts which are invisible and will be used as points for the start of a raycast 'bullet' when shooting. This works as well, I just can't really use it because the point is scattered for some odd reason when you equip and is welded away from the tool. The parts are already placed on the correct spot of the tool and I'm not sure if it matters but the position of the 6 parts were moved without a grid (Not 1 stud, not 1/5th of a stud). They are also CanCollide = false so physics shouldn't be causing them to be a distance away from the character .
Here is the welding script inside of the tool;
local Tool = script.Parent.Parent
local Plr = game.Players.LocalPlayer
repeat wait() until Plr.Character
local Char = Plr.Character
local LArm = Char:WaitForChild("Left Arm")
local RArm = Char:WaitForChild("Right Arm")
local Hum = Char:WaitForChild("Humanoid")
local Claw = Tool.LClaw
local Equip = Instance.new("Animation")
Equip.AnimationId = "rbxassetid://335140780"
Equip.Name = "EP"
local Collect = script.Parent.Parent:GetChildren()
local WeldPart = script.Parent.Parent.Handle
local WeldPart2 = Claw
local NotDone = false
if NotDone == false then NotDone = true
for _, part in pairs(Collect) do
if part:IsA("BasePart") then
if part.Name ~= WeldPart.Name and part.Name ~= WeldPart2.Name then
if part.Name == "lbottom" or part.Name == "lmiddle" or part.Name == "ltop" then
local Weld = Instance.new("Weld", WeldPart2)
Weld.Name = part.Name
Weld.Part0 = WeldPart2
Weld.Part1 = part
Weld.C0 = Weld.Part0.CFrame:inverse()
Weld.C1 = Weld.Part1.CFrame:inverse()
elseif part.Name == "Bottom" or part.Name == "Middle" or part.Name == "Top" then
local Weld = Instance.new("Weld", WeldPart)
Weld.Name = part.Name
Weld.Part0 = WeldPart
Weld.Part1 = part
Weld.C0 = Weld.Part0.CFrame:inverse()
Weld.C1 = Weld.Part1.CFrame:inverse()
end
end
end
end
end
Tool.Equipped:connect(function()
local ETrack = Hum:LoadAnimation(Equip)
ETrack:Play()
ETrack:AdjustSpeed(0)
Tool.Unequipped:connect(function()
ETrack:Stop()
end)
if not Tool:WaitForChild("Handle"):FindFirstChild("Weld") then
for _ , Part in pairs(Tool:GetChildren()) do
if Part.Name == "LClaw" then
Part.CFrame = LArm.CFrame
local WeldPart0 = LArm
local Weld = Instance.new("Weld", WeldPart0)
Weld.Name = Part.Name
Weld.Part0 = WeldPart0
Weld.Part1 = Part
Weld.C0 = CFrame.new(-0.05,-.8,0) * CFrame.Angles(0, math.rad(180), 0)
end
end
end
end)
