Files
wnsrc/lua/autorun/properties/gravity.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

93 lines
2.0 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
AddCSLuaFile()
-- The following is for the server's eyes only
local GravityDuplicator
if ( SERVER ) then
function GravityDuplicator( ply, ent, data )
if ( !data || !data.enabled ) then
duplicator.ClearEntityModifier( ent, "gravity_property" )
return
end
-- Simply restore the value whenever we are duplicated
-- We don't need to reapply EnableGravity because duplicator already does it for us
ent:SetNWBool( "gravity_disabled", data.enabled )
duplicator.StoreEntityModifier( ent, "gravity_property", data )
end
duplicator.RegisterEntityModifier( "gravity_property", GravityDuplicator )
end
properties.Add( "gravity", {
MenuLabel = "#gravity",
Type = "toggle",
Order = 1001,
Filter = function( self, ent, ply )
if ( !IsValid( ent ) ) then return false end
if ( !gamemode.Call( "CanProperty", ply, "gravity", ent ) ) then return false end
if ( ent:GetClass() == "prop_physics" ) then return true end
if ( ent:GetClass() == "prop_ragdoll" ) then return true end
return false
end,
Checked = function( self, ent, ply )
return ent:GetNWBool( "gravity_disabled" ) == false
end,
Action = function( self, ent )
self:MsgStart()
net.WriteEntity( ent )
self:MsgEnd()
end,
Receive = function( self, length, ply )
local ent = net.ReadEntity()
if ( !properties.CanBeTargeted( ent, ply ) ) then return end
if ( !self:Filter( ent, ply ) ) then return end
local bones = ent:GetPhysicsObjectCount()
local b = ent:GetNWBool( "gravity_disabled" )
for i = 0, bones - 1 do
local phys = ent:GetPhysicsObjectNum( i )
if ( IsValid( phys ) ) then
phys:EnableGravity( b )
phys:Wake()
end
end
ent:SetNWBool( "gravity_disabled", b == false )
GravityDuplicator( ply, ent, { enabled = ent:GetNWBool( "gravity_disabled" ) } )
end
} )