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.