Desynchronization of client side models

So, about my problem. I use client side models for rendering weapons holstered weapons and WM models. On my local server or in SP everything works fine. But on the dedicated server there starts desynchronization or whatever it is, causing some king of lag, like you can see on the video below:

Some notes: Some people do not have lag, some of them have. When some players spectate by their self using camera, there's no lag again

So, is there any kind of solution?

P.S. Im using PostPlayerDraw hook

post some code?

also, this:


function CopyAngle(Ang)
	local AngCopy = Angle()
	AngCopy:Set(Ang)
	return AngCopy
end

function CopyVector(Vec)
	local VecCopy = Vector()
	VecCopy:Set(Vec)
	return VecCopy
end

function AddAngles(Ang1, Ang2)
	local Ang1Copy = CopyAngle(Ang1)
	--Ang1Copy.p = Ang1Copy.p + Ang2.p
	Ang1Copy:RotateAroundAxis(Ang1Copy:Forward(), Ang2.p)
	Ang1Copy:RotateAroundAxis(Ang1Copy:Up(), Ang2.y)
	Ang1Copy:RotateAroundAxis(Ang1Copy:Right(), Ang2.r)
	--Ang1Copy.r = Ang1Copy.r + Ang2.r
	return Ang1Copy
end

SWBHolsterData =
{
	["w_crossbow.mdl"] =
	{
		"ValveBiped.Bip01_L_Thigh",
		Vector(4, -4, 3),
		Angle(0, 20, 0),
	}
}

function HolsterDraw(Ply, Weapon, HolsterData, Override)
	if IsValid(Ply) and IsValid(Weapon) and HolsterData and (HolsterData[6] or Weapon:GetModel()) then
		local HolsterModel = Weapon.gmp_HolsterModel
		if not HolsterModel then
			HolsterModel = ClientsideModel(HolsterData[6] or Weapon:GetModel(), RENDERGROUP_OPAQUE)
			HolsterModel:SetNoDraw(true)
			HolsterModel:SetMoveType( MOVETYPE_NONE )
			HolsterModel:SetParent(Ply)
			HolsterModel.GetWeaponColor = function()
				return Ply:GetWeaponColor()
			end
			Weapon.gmp_HolsterModel = HolsterModel
		end
		local Source = IsValid(Override) and Override or Ply
		local Bone = Source:LookupBone(HolsterData[1])
		if Bone then
			local BonePos, BoneAng = Source:GetBonePosition(Bone)
			local Pos = CopyVector(HolsterData[2])
			Pos:Rotate(BoneAng)
			HolsterModel:SetPos(BonePos + Pos)
			HolsterModel:SetAngles(AddAngles(BoneAng, HolsterData[3]))
			HolsterModel:SetRenderOrigin(BonePos + Pos)
			HolsterModel:SetRenderAngles(AddAngles(BoneAng, HolsterData[3]))
			HolsterModel:SetupBones()
			HolsterModel:SetSkin(Weapon:GetSkin())
			--HolsterModel:SetMaterial(Weapon:GetMaterial())
			if Weapon.WorldSkin then 
				HolsterModel:SetMaterial(Weapon.Skin)
			end
			for i = 0, HolsterModel:GetNumBodyGroups() - 1 do
				HolsterModel:SetBodygroup(i, Weapon:GetBodygroup(i) or 0)
			end
			HolsterModel:SetColor(Weapon:GetColor())
			if HolsterData[5] then
				HolsterData[5](HolsterModel, Ply, Weapon, HolsterData, Override)
			end
			HolsterModel:DrawModel()
			if HolsterData[4] then
				HolsterData[4](HolsterModel, Ply, Weapon, HolsterData, Override)
			end
		end
	end
end

local function SwbHolsterDraw(Ply)
		if Ply and not IsValid(Ply) then return end
		local Override = false
		if not Ply then
			return
		end
		if IsValid(Ply) and not Ply:InVehicle() then
			local HolsterData = nil
			local ActiveWeapon = Ply:GetActiveWeapon()
			for _, Weapon in pairs(Ply:GetWeapons()) do
				if IsValid(Weapon) and Weapon ~= ActiveWeapon then
					HolsterData = SWBHolsterData[Weapon:GetClass()]
					if not HolsterData then
						local WeaponModel = Weapon:GetModel()
						local SearchPath = "models/weapons/"
						if WeaponModel and WeaponModel:lower():sub(1, SearchPath:len()) == SearchPath then
							HolsterData = SWBHolsterData[WeaponModel:sub(SearchPath:len() + 1):lower()]
						end
					end
				end
				if HolsterData then
					HolsterDraw(Ply, Weapon, HolsterData, Override)
				end
				HolsterData = nil
			end
		end

end
hook.Add("PostPlayerDraw", "SwbHolsterDraw", SwbHolsterDraw)

Whole code without models table (only crowbar for demonstration). And yeah, I tried SetParent already

Here we go: http://wiki.garrysmod.com/page/Entity/FollowBone

Checked it with this;
[lua]
local ply = LocalPlayer()
local c = ClientsideModel( “models/props_borealis/bluebarrel001.mdl”, RENDERGROUP_OPAQUE )
c:SetPos(ply:GetPos() + ply:EyeAngles():Forward()*50)
c:FollowBone( ply, 5 )
[/lua]

Same… I think it’s not script problem. Just add it to the autorun/client and test. Problem is appears only on the server