Ok, so it's not as simple of an answer as you might think. Making an animation when equipping a tool is easy, but playing it properly is where I have a problem. What I mean by that is when you equip the tool it takes a few milliseconds for the animation to load and play, and when I make an equipped animation it will play after those few milliseconds, making the whole equipping thing weird because the tool can be seen in idle position and only after like 0.1 seconds the equip animation plays. What I'm trying to achieve is that the tool doesn't show up to the player once the animation has begun.
TLDR: the animation plays with a small delay, making the equipped animation play only 0.1 seconds after the tool is equipped.
local Tool = script.Parent
local anim = Tool:WaitForChild("Animation")
local Players = game:GetService("Players")
anim.AnimationId = "rbxassetid://8775729039"
Tool.Equipped:Connect(function(Mouse)
local player = Players:GetPlayerFromCharacter(Tool.Parent)
local animation = player.Character.Humanoid:LoadAnimation(anim)
animation:Play()
end)
GOAL: Make the animation play immediately when the tool is equipped, or don't show the tool for the small amount of time animation takes to load.
NOTE: If you have the idea of making the tool invisible then visible after a small amount of time don't bother answering, having 10 meshes each with unique texture in the tool makes it unethical to change the visibility of them all.

5 comments
Oh also ignore the fact animation only loads when the tool is equipped, The answer saying to make it load beforehand won't work for me, I really need to find a way to hide the tool once it starts playing or something like that
Animation delay happens ALL THE TIME! There's no fix to that. Every animation in every game has delays. Delay happens because of internet connection or servers shutting down.
@T3_MasterGamer You are correct, it does happen all the time, but every good fps game hides that somehow, and I need to know how to they do it.
I don't think they have a method for that.
One thing I could say is use Humanoid.Animator:LoadAnimation() instead of Humanoid:LoadAnimation()