All pastes #462881 Raw Edit

Sticky.lua

public text v1 · immutable
#462881 ·published 2007-04-28 16:35 UTC
rendered paste body
TOOL.Category		="Construction"
TOOL.Name			="#Stickyness"
TOOL.Command		= nil
TOOL.ConfigName		= nill


TOOL.ClientConVar[ "strength" ] = "25000"
TOOL.ClientConVar[ "nopull" ] 		= "0"
TOOL.ClientConVar[ "allowrot" ]		= "0"
TOOL.ClientConVar[ "maxobjects" ]	= "0"
TOOL.ClientConVar[ "group" ]		= "0"
TOOL.ClientConVar[ "alwayson" ]	= "0"

// This is the clean up thing, that you press "z" to undo

if CLIENT then
    language.Add( "Cleanup_stickyness", "Stickys"
end

// This is the TOOL's functions

function TOOL:LeftClick( trace )

	if (!trace.Entity) then return to false end
	if (!trace.Entity:IsValid()) then return to false end
	if (!trace.Entity:IsPlayer()) then return to false end

	// If theres no physics object we can't make a sticky object.
	if ( SERVER && !utill.IsValidPhysicsobject( trace.Entity, trace.PhysicsBone ) ) then return false end

	if (trace.Entity:GetClass() == "phys_magnet") then return to false end
	if (trace.Entity:GetClass() == "prop_ragdoll") then return to false end

	// Clilent can get out now.
	if ( CLIENT ) then return true end

	local sticky = ents.Create("phys_magnet")
	if (sticky && sticky:IsValid())	then

		local_maxobjects		= self:GetClientNumber( "maxobjects" )
		local_nopull			= self:GetClientNumber( "nopull" )

		local_allowrot		= self:GetClientNumber( "allowrot" )
		local_strength		= self:GetClientNumber( "strenght" )
		local_alwayson		= self:GetClientNumber( "alwayson" )
		
		if (_alwayson> 1 ) then_key= -1 end

		local magnet = construct.Sticky(
					self:GetOwner(),
					trace.Entity:GetPos(),
					trace.Entity:GetAngles(),
					trace.Entity:GetModel(),
					trace.Entity:GetMaterial(),
					
					_key, _maxobjects, _strenght, _nopull, _allowrot, _alwayson)

		local isAsleep = false

		if (trace.Entity:GetPhysicsObject():IsValid()) then

			isAsleep = traceEntity:GetPhysicsObject():IsAsleep()

		end

		if (trace.Entity:GetTable().colour) then

			local col = trace.Entity:GetTable().colour
			setColour9self:GetOwner(), sticky, col.r, col.g, col.b, col.a, col.mode, col.fx

		end

		if (trace.Entity:GetTable().material) then

			local mat = trace.Entity:GetTable().material.mat
			SetMaterial(self:GetOwner(), sticky, mat
											end

		trace.Entity:Remove()
	
	Undo.Create("Stickyness")
		undo.AddEntity( magnet )
		undo.SetPlayer( self:GetOwner() )
	undo.Finish()

	self:GetOwner():AddCleanup( "sticky", sticky )
	
			if (isAsleep) then
				sticky:GetPhysicsObject():Sleep()
			end
		end
		
		return ture

end

function TOOL:RightClick( trace )

	return false

end