Sorry dude but your code is a mess.
You can not multicast from the client which underlines my theory from before that you only set your weapon on the client or ther server has a the same value set to a different gun or something. Would be interesting what your InitWeapon does.
PS: a valid check is useless if you ignore it anyway