Player Teleport: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
No edit summary
Line 40: Line 40:
}
}
}
}
</pre>
<pre>
Not Working!
</pre>
</pre>
[[Category:Snippets]]
[[Category:Snippets]]

Revision as of 02:04, 10 March 2011

Add this to sdk_player.cpp, bind a key to 'teleport', and enjoy!

CON_COMMAND( teleport, "Teleportin Time") {
	ToSDKPlayer(UTIL_GetCommandClient())->TryTeleport();
}

void CSDKPlayer::TryTeleport() {

		// set up the vectors and traceline
		trace_t tr;
		Vector	vecStart, vecStop, vecDir;

		// get the angles
		AngleVectors( this->EyeAngles(), &vecDir );

		// get the vectors
		vecStart = this->EyePosition();
		vecStop = vecStart + vecDir * MAX_TRACE_LENGTH;

		// do the traceline
		UTIL_TraceLine( vecStart, vecStop, MASK_ALL, this, COLLISION_GROUP_NONE, &tr );

		// Did we hit the floor?
		if (tr.DidHitWorld()) {
			Vector origin = tr.endpos;
			bool teleOK = false;
			// Is there room for a player?
			for (int i = 0; i < 18 &&! teleOK; i++ ) {
				UTIL_TraceHull( origin, origin, 
					VEC_HULL_MIN, VEC_HULL_MAX, MASK_PLAYERSOLID, this, COLLISION_GROUP_PLAYER_MOVEMENT, &tr );
				if ( tr.startsolid ) 
					origin.z += 1.0f;
				else 
					teleOK = true;
			}

			if (teleOK)
				this->SetAbsOrigin(origin);
			
		}
}