• Desynchronization of client side models
    4 replies, posted
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: [video=youtube;FIMxYDMmzG0]https://www.youtube.com/watch?time_continue=2&v=FIMxYDMmzG0[/video] 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: [url]https://wiki.garrysmod.com/page/Entity/SetParent[/url]
[QUOTE=Pyro-Fire;52716314]post some code? also, this: [url]https://wiki.garrysmod.com/page/Entity/SetParent[/url][/QUOTE] [CODE]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)[/CODE] Whole code without models table (only crowbar for demonstration). And yeah, I tried SetParent already
Here we go: [url]http://wiki.garrysmod.com/page/Entity/FollowBone[/url] 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]
[QUOTE=Pyro-Fire;52722558]Here we go: [url]http://wiki.garrysmod.com/page/Entity/FollowBone[/url] 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][/QUOTE] Same... I think it's not script problem. Just add it to the autorun/client and test. Problem is appears only on the server
Sorry, you need to Log In to post a reply to this thread.