• Help with Ragdoll crash stopper
    4 replies, posted
We have a ragdoll crash stopper that catches ragdolls going at excessive velocities, tries to stop them and failing that deletes the ragdoll. Users on our ttt server have learned to shake a body like crazy to cause the crash stopper to delete the body and hide their treachery. In order to stop this I would like to add a code that checks if an item is flagged "FVPHYSICS_PLAYER_HELD" and if so, freezes the player (or if that's to difficult the closest player to the ragdoll) for 10 seconds and announces to everyone that they tried to hide a body. Here is the crash stopper code I have to work with. The freeze should trigger when the velocity exceeds 1500 [code] hook.Add("Think","AMB_CrashCatcher",function() for k, ent in pairs(ents.FindByClass("prop_ragdoll")) do if IsValid(ent) then if ent.player_ragdoll then local velo = ent:GetVelocity( ):Length() if velo >= 1500 and velo <= 2499 then AMB_KillVelocity(ent) ServerLog("[!CRASHCATCHER!] Caught velocity > 1500 on a ragdoll entity, negating velocity and temporarily disabling motion.\n") elseif velo >= 2500 then AMB_KillVelocity(ent) ent:Remove() ServerLog("[!CRASHCATCHER!] Caught velocity > 2500 on a ragdoll entity, removing offending ragdoll entity from world.\n") end end end end end) function AMB_SetSubPhysMotionEnabled(ent, enable) if not IsValid(ent) then return end for i=0, ent:GetPhysicsObjectCount()-1 do local subphys = ent:GetPhysicsObjectNum(i) if IsValid(subphys) then subphys:EnableMotion(enable) if enable then subphys:Wake() end end end end function AMB_KillVelocity(ent) ent:SetVelocity(vector_origin) -- The only truly effective way to prevent all kinds of velocity and -- inertia is motion disabling the entire ragdoll for a tick -- for non-ragdolls this will do the same for their single physobj AMB_SetSubPhysMotionEnabled(ent, false) timer.Simple(0, function() AMB_SetSubPhysMotionEnabled(ent, true) end) end [/code]
Of course telling my why this can't be done would be useful too.
Well I am not positive, but I would suggest looking into the effects of the magneto stick on an entity. I will browse a little, but I believe you can make it so it checks if the body is being held.
[QUOTE=Galactic;42248835]We have a ragdoll crash stopper that catches ragdolls going at excessive velocities, tries to stop them and failing that deletes the ragdoll. Users on our ttt server have learned to shake a body like crazy to cause the crash stopper to delete the body and hide their treachery. In order to stop this I would like to add a code that checks if an item is flagged "FVPHYSICS_PLAYER_HELD" and if so, freezes the player (or if that's to difficult the closest player to the ragdoll) for 10 seconds and announces to everyone that they tried to hide a body. Here is the crash stopper code I have to work with. The freeze should trigger when the velocity exceeds 1500 [code] hook.Add("Think","AMB_CrashCatcher",function() for k, ent in pairs(ents.FindByClass("prop_ragdoll")) do if IsValid(ent) then if ent.player_ragdoll then local velo = ent:GetVelocity( ):Length() if velo >= 1500 and velo <= 2499 then AMB_KillVelocity(ent) ServerLog("[!CRASHCATCHER!] Caught velocity > 1500 on a ragdoll entity, negating velocity and temporarily disabling motion.\n") elseif velo >= 2500 then AMB_KillVelocity(ent) ent:Remove() ServerLog("[!CRASHCATCHER!] Caught velocity > 2500 on a ragdoll entity, removing offending ragdoll entity from world.\n") end end end end end) function AMB_SetSubPhysMotionEnabled(ent, enable) if not IsValid(ent) then return end for i=0, ent:GetPhysicsObjectCount()-1 do local subphys = ent:GetPhysicsObjectNum(i) if IsValid(subphys) then subphys:EnableMotion(enable) if enable then subphys:Wake() end end end end function AMB_KillVelocity(ent) ent:SetVelocity(vector_origin) -- The only truly effective way to prevent all kinds of velocity and -- inertia is motion disabling the entire ragdoll for a tick -- for non-ragdolls this will do the same for their single physobj AMB_SetSubPhysMotionEnabled(ent, false) timer.Simple(0, function() AMB_SetSubPhysMotionEnabled(ent, true) end) end [/code][/QUOTE] Hey Galactic, i was wondering if i could have your permission to use this coding that you made on my server as well. it seems like a very nice fix to resolve the ragdoll velocity crash issue that i am having. Please let me know Thanks
He didn't make it, this was made by someone else for everyone use.
Sorry, you need to Log In to post a reply to this thread.