All pastes #2095945 Raw Edit

Someone

public text v1 · immutable
#2095945 ·published 2011-12-23 04:47 UTC
rendered paste body
function GM:PhysgunPickup( ply, ent )

	if string.find( BadClass, ent:GetClass()) then
		return false //That is how you eliminate that bunch of lines below, buddy.
	end
	/*
	if(ent:GetClass() ==  "player") then
		return false // Don't allow them to pick up players!!
	elseif string.find( ent:GetClass(), "door_" ) then
		return false //No physgunning doors here
	elseif string.find( ent:GetClass(), "prop_ragdoll" ) then
		return false //Nobody should be using ragdolls anyway
	elseif string.find( ent:GetClass(), "func_" ) then
		return false //Functional entities shouldn't be moved
	elseif string.find( ent:GetClass(), "npc_" ) then
		return false //Npcs are kinda important, don't move them please
	end
	*/
	
	ConstrainedEntities = constraint.GetAllConstrainedEntities( ent )
	
	//As much as you all might be confused by this, I admit I'm more confused, I'll attempt to clarfy my theory
	//This code makes physgunned props nocollide and change color to semi-transparent
	
	//GROUP_NONE is conventional props, GROUP_WORLD is nocollide all.
	
	//Using a MUCH safer system now so that color is never manipulated via this file, instead the material changes, and even includes oversight for modified materials
	//redtbl[1000], greentbl[1000], bluetbl[1000], alphatbl[1000] = ent:GetColor( ) Respectful Code to keep players color changes the same, that's nice of me
	//ent:SetColor(255, 255, 255, 125) 

	for k, v in pairs( ConstrainedEntities ) do // Get all entities constrained by the picked up entity, and make them nocollide all as well
		
		entmat[v:EntIndex()] = v:GetMaterial()
		if(v:IsValid()) then// Aparantely the main prop is part of constrained entities, so I only need this loop rather then a loop and a half for the first prop
			
			v:SetCollisionGroup(COLLISION_GROUP_WORLD)
			v.CollisionGroup=COLLISION_GROUP_WORLD
			v:SetMaterial("Models/effects/splodearc_sheet")
			
			//This was removed below due to bugs with nocollide all, instead we will be targetting the nocollide tool directly.
			
			/*
			if v:GetCollisionGroup()==COLLISION_GROUP_WORLD then// Targets each entity of a contraption and nocollides it
				game.ConsoleCommand("say Nocollided props can't be picked up until they're recollided.\n")//This has been removed since I don't want players to be able to hit people with solid props via the physgun, and I can't find a way to save it in memory via the collision group
				//v:SetCollisionGroup(COLLISION_GROUP_DEBRIS)
				//v.CollisionGroup=COLLISION_GROUP_DEBRIS
				return false
			else
				//game.ConsoleCommand("say COLLISION_GROUP_NONE\n")//Just test stuff so I could get this perfect
				v:SetCollisionGroup(COLLISION_GROUP_WORLD)
				v.CollisionGroup=COLLISION_GROUP_WORLD
			end
			*/
			//redtbl[v], greentbl[v], bluetbl[v], alphatbl[v] = v:GetColor( )// Respectful Code to keep players color changes the same, that's nice of me
		end
	end
	return true
end

function GM:PhysgunDrop( ply, ent )
	ConstrainedEntities = constraint.GetAllConstrainedEntities( ent )
	
	//ent:SetColor(255, 255, 255, 255)
	// Loop through all the entities in the constraint system to recollide them
	
	for k, v in pairs( ConstrainedEntities ) do
		if(v:IsValid()) then
			if v:GetCollisionGroup()==COLLISION_GROUP_WORLD then
				v:SetCollisionGroup(COLLISION_GROUP_NONE)
				v.CollisionGroup=COLLISION_GROUP_NONE
			end
			
			v:SetMaterial(entmat[v:EntIndex()])//This right here is awesome
			
			//Removed, No reason to have extra code in here, even though these comments make it a bit longer, but that's what alpha is for :P
			
			/*
			else
				//v:SetCollisionGroup(COLLISION_GROUP_WORLD)
				//v.CollisionGroup=COLLISION_GROUP_WORLD
			end
			*/
		end
	end
end