mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
93 lines
2.0 KiB
Lua
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
|
|
|
|
} )
|