Tool inside arm?

Tool is working mostly as expected, however in-game, not in studio, the tool will appear inside the player’s arm, seen below. Have zero clue why this happens, no errors, script works as intended and was fine up until testing in-game. Is this some sort of bug or did I do something wrong? Couldn’t find any posts related to this problem, either.
Also, first time posting on this topic, please tell me if I’m doing something wrong.

1 Like

Try using a ToolGripEditor plugin, and change how the player holds the tool.

1 Like

maybe its client side if so you should use remote event

Everything including animations are server sided

Have you tried to animate tool grip to motor6D?

That’s what I’m using currently, motor6ds

Ok then let me see your code so I can see some issue

    local Tool = script.Parent
local Player = Tool.Parent.Parent
local Character = Player.Character or Player.CharacterAdded:wait()
local repStorage = game:GetService("ReplicatedStorage")
local debounce = false
local equipped = false
local IgnoreList = {
	Character, Character:GetDescendants()
}
local serverscriptservice = game:GetService("ServerScriptService")
local RaycastHitbox = require(serverscriptservice.RaycastHitbox)
local Hitbox = RaycastHitbox:Initialize(Tool.BodyAttach, IgnoreList)
local HitboxObject = RaycastHitbox:GetHitbox(Tool.BodyAttach)
HitboxObject:DebugMode(false)
local cameraevent = repStorage.shakecamera

Tool.Equipped:Connect(function()
	local Motor6D = Instance.new("Motor6D",Character.RightHand)
	Motor6D.Name = "RightMotor6D"
	Motor6D.Part0 = Character.RightHand
	Motor6D.Part1 = Tool.BodyAttach
	
	activate = script.Parent.Parent.Humanoid:LoadAnimation(script.Activate)
	idle2 = script.Parent.Parent.Humanoid:LoadAnimation(script.Idle2)
	idle = script.Parent.Parent.Humanoid:LoadAnimation(script.Idle)
	idle:Play()
	Character:WaitForChild("Humanoid").WalkSpeed = 13
	Character.Humanoid.JumpHeight = 0
	
	while equipped == true do
		wait(15)
		if equipped == false then
			activate:Stop()
			idle:Stop()
			idle2:Stop()
			Hitbox:HitStop()
			Character.Humanoid.WalkSpeed = 16
			Character.Humanoid.JumpHeight = 7.2
			Character.Humanoid.AutoRotate = true
			debounce = false
			return
		end
		idle:Stop()
		idle2:Play()
		wait(3.26)
		if equipped == false then
			activate:Stop()
			idle:Stop()
			idle2:Stop()
			Hitbox:HitStop()
			Character.Humanoid.WalkSpeed = 16
			Character.Humanoid.JumpHeight = 7.2
			Character.Humanoid.AutoRotate = true
			debounce = false
			return
		end
		idle2:Stop()
		idle:Play()
	end
end)

Tool.Activated:Connect(function()
	if debounce == false then
		debounce = true
		Character.Humanoid.WalkSpeed = 10
		activate:Play()
		cameraevent:FireClient(Player, 3)
		wait(0.87)
		Hitbox:HitStart()
		script.Parent.slashsound:Play()
		wait(0.18)
		Character.Humanoid.WalkSpeed = 0
		Character.Humanoid.AutoRotate = false
		wait(0.05)
		script.Parent.impactsound:Play()
		cameraevent:FireAllClients(1)
		local Part2 = repStorage.Part2:Clone()
		Part2.Parent = workspace
		local offset = Vector3.new(0, -3, -6)
		Part2.CFrame = Character.HumanoidRootPart.CFrame*CFrame.new(offset)
		Part2.Orientation = Vector3.new(0, 90, -90)
		wait(0.19)
		script.Parent.pullsound:Play()
		wait(0.4)
		script.Parent.pullsound:Play()
		wait(0.4)
		Hitbox:HitStop()
		wait(0.16)
		script.Parent.pulloutsound:Play()
		Character.Humanoid.WalkSpeed = 10
		Character.Humanoid.AutoRotate = true
		wait(0.87)
		cameraevent:FireClient(Player, 4)
		Character.Humanoid.WalkSpeed = 13
		debounce = false
	end
end)

Hitbox.OnHit:Connect(function(touch)
	cameraevent:FireAllClients(2)
	script.Parent.bruhsound:Play()
	if touch.Name == "Handle" or touch.Name == "BodyAttach" then
		if touch.Parent.Parent:FindFirstChild("HumanoidRootPart") == nil then return end
		HRP = touch.Parent.Parent:FindFirstChild("HumanoidRootPart")
	else
		if touch.Parent:FindFirstChild("HumanoidRootPart") == nil then return end
		HRP = touch.Parent:FindFirstChild("HumanoidRootPart")
	end
	local Humanoid = HRP.Parent:FindFirstChild("Humanoid")
	local BodyVelocity = Instance.new("BodyVelocity", HRP)
	BodyVelocity.Velocity = Vector3.new(math.random(-5000, 5000), math.random(-5000, 5000), math.random(-5000, 5000))
	BodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
	wait(0.5)
	Humanoid:TakeDamage(1000)
end)

Tool.Unequipped:Connect(function()
	if Character.RightHand:FindFirstChild("RightMotor6D") then
		Character.RightHand.RightMotor6D:Destroy()
	end
	idle:Stop()
	idle2:Stop()
	Character.Humanoid.WalkSpeed = 16
	Character.Humanoid.JumpHeight = 7.2
	equipped = false
end)

Here’s a really good plugin I use for this. Tool Grip Editor - Roblox Just a few Robux but totally worth it.

it should be

local Tool = script.Parent
local Player = nil
local Character = nil
local repStorage = game:GetService("ReplicatedStorage")
local debounce = false
local equipped = false
local IgnoreList = {
	Character, Character:GetDescendants()
}
local serverscriptservice = game:GetService("ServerScriptService")
local RaycastHitbox = require(serverscriptservice.RaycastHitbox)
local Hitbox = RaycastHitbox:Initialize(Tool.BodyAttach, IgnoreList)
local HitboxObject = RaycastHitbox:GetHitbox(Tool.BodyAttach)
HitboxObject:DebugMode(false)
local cameraevent = repStorage.shakecamera

Tool.Equipped:Connect(function()
	Character = Tool.Parent
	Player = game.Players:GetPlayerFromCharacter(Character)
	local Motor6D = Instance.new("Motor6D",Character.RightHand)
	Motor6D.Name = "RightMotor6D"
	Motor6D.Part0 = Character.RightHand
	Motor6D.Part1 = Tool.BodyAttach

	activate = script.Parent.Parent.Humanoid:LoadAnimation(script.Activate)
	idle2 = script.Parent.Parent.Humanoid:LoadAnimation(script.Idle2)
	idle = script.Parent.Parent.Humanoid:LoadAnimation(script.Idle)
	idle:Play()
	Character:WaitForChild("Humanoid").WalkSpeed = 13
	Character.Humanoid.JumpHeight = 0

	while equipped == true do
		wait(15)
		if equipped == false then
			activate:Stop()
			idle:Stop()
			idle2:Stop()
			Hitbox:HitStop()
			Character.Humanoid.WalkSpeed = 16
			Character.Humanoid.JumpHeight = 7.2
			Character.Humanoid.AutoRotate = true
			debounce = false
			return
		end
		idle:Stop()
		idle2:Play()
		wait(3.26)
		if equipped == false then
			activate:Stop()
			idle:Stop()
			idle2:Stop()
			Hitbox:HitStop()
			Character.Humanoid.WalkSpeed = 16
			Character.Humanoid.JumpHeight = 7.2
			Character.Humanoid.AutoRotate = true
			debounce = false
			return
		end
		idle2:Stop()
		idle:Play()
	end
end)

Tool.Activated:Connect(function()
	if debounce == false then
		debounce = true
		Character.Humanoid.WalkSpeed = 10
		activate:Play()
		cameraevent:FireClient(Player, 3)
		wait(0.87)
		Hitbox:HitStart()
		script.Parent.slashsound:Play()
		wait(0.18)
		Character.Humanoid.WalkSpeed = 0
		Character.Humanoid.AutoRotate = false
		wait(0.05)
		script.Parent.impactsound:Play()
		cameraevent:FireAllClients(1)
		local Part2 = repStorage.Part2:Clone()
		Part2.Parent = workspace
		local offset = Vector3.new(0, -3, -6)
		Part2.CFrame = Character.HumanoidRootPart.CFrame*CFrame.new(offset)
		Part2.Orientation = Vector3.new(0, 90, -90)
		wait(0.19)
		script.Parent.pullsound:Play()
		wait(0.4)
		script.Parent.pullsound:Play()
		wait(0.4)
		Hitbox:HitStop()
		wait(0.16)
		script.Parent.pulloutsound:Play()
		Character.Humanoid.WalkSpeed = 10
		Character.Humanoid.AutoRotate = true
		wait(0.87)
		cameraevent:FireClient(Player, 4)
		Character.Humanoid.WalkSpeed = 13
		debounce = false
	end
end)

Hitbox.OnHit:Connect(function(touch)
	cameraevent:FireAllClients(2)
	script.Parent.bruhsound:Play()
	if touch.Name == "Handle" or touch.Name == "BodyAttach" then
		if touch.Parent.Parent:FindFirstChild("HumanoidRootPart") == nil then return end
		HRP = touch.Parent.Parent:FindFirstChild("HumanoidRootPart")
	else
		if touch.Parent:FindFirstChild("HumanoidRootPart") == nil then return end
		HRP = touch.Parent:FindFirstChild("HumanoidRootPart")
	end
	local Humanoid = HRP.Parent:FindFirstChild("Humanoid")
	local BodyVelocity = Instance.new("BodyVelocity", HRP)
	BodyVelocity.Velocity = Vector3.new(math.random(-5000, 5000), math.random(-5000, 5000), math.random(-5000, 5000))
	BodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
	wait(0.5)
	Humanoid:TakeDamage(1000)
end)

Tool.Unequipped:Connect(function()
	if Character.RightHand:FindFirstChild("RightMotor6D") then
		Character.RightHand.RightMotor6D:Destroy()
	end
	idle:Stop()
	idle2:Stop()
	Character.Humanoid.WalkSpeed = 16
	Character.Humanoid.JumpHeight = 7.2
	equipped = false
end)

This is on Roblox’s end. Sadly, no one has found a fix (atleast i think)

What was changed exactly? I don’t see much of a difference.

Really? I was hoping this wasn’t the case, should I just wait and see?

here what I changed:

Tool.Equipped:Connect(function()
	Character = Tool.Parent
	Player = game.Players:GetPlayerFromCharacter(Character)

Yes :/.

The problem is not that I can’t get the animations to play and replicate, they play fine and everything functions perfectly, even the weapon’s hitbox is still exactly the same, even though it’s supposedly on a different position for all the clients.

I’ll just wait it out, I guess. Have you experienced a similar problem like this?

Yes, I animate tool guns that use motor6d grips like this, always happens.