Let’s say tank shoots another tank, you get an angle and it’s 100°. Most likely the tank won’t penetrate the armor. How could I get angle from a raycast shot?

local ray = Ray.new(startVector, (endVector - startVector).unit * Configuration.FireRange.Value)
local hit, position, normal = workspace:FindPartOnRay(ray, Tank, false, true)
local distance = (position - startVector).magnitude

This is really easy, you just need to take the math.acos of the dot product of the two direction vectors, so that would be math.acos(ray.Direction:Dot(normal))

So this method is nearly 8 months old, and has actually been deprecated. You should be using the new raycasting function, in which you will receive an instance from a raycast. You would get the normal from the returned raycast result instance if the raycast returned anything.