mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
92
lua/autorun/properties/gravity.lua
Normal file
92
lua/autorun/properties/gravity.lua
Normal file
@@ -0,0 +1,92 @@
|
||||
--[[
|
||||
| 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
|
||||
|
||||
} )
|
||||
Reference in New Issue
Block a user