89 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//========= Copyright Valve Corporation, All rights reserved. ============//
 | 
						|
//
 | 
						|
// Purpose: 
 | 
						|
//
 | 
						|
// $NoKeywords: $
 | 
						|
//=============================================================================//
 | 
						|
 | 
						|
#include "cbase.h"
 | 
						|
#include "convar.h"
 | 
						|
#include "tier0/dbg.h"
 | 
						|
#include "player.h"
 | 
						|
#include "world.h"
 | 
						|
 | 
						|
// memdbgon must be the last include file in a .cpp file!!!
 | 
						|
#include "tier0/memdbgon.h"
 | 
						|
 | 
						|
void Test_CreateEntity( const CCommand &args )
 | 
						|
{
 | 
						|
	CBasePlayer *pPlayer = UTIL_GetCommandClient();
 | 
						|
 | 
						|
	// Require a player entity or that the command was entered from the dedicated server console
 | 
						|
	if ( !pPlayer && UTIL_GetCommandClientIndex() > 0 )
 | 
						|
	{
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( args.ArgC() < 2 )
 | 
						|
	{
 | 
						|
		Error( "Test_CreateEntity: requires entity classname argument." );
 | 
						|
	}
 | 
						|
 | 
						|
	const char *pClassName = args[ 1 ];
 | 
						|
 | 
						|
	// Don't allow regular users to create point_servercommand entities for the same reason as blocking ent_fire
 | 
						|
	if ( pPlayer && !Q_stricmp( pClassName, "point_servercommand" ) )
 | 
						|
	{
 | 
						|
		if ( engine->IsDedicatedServer() )
 | 
						|
		{
 | 
						|
			// We allow people with disabled autokick to do it, because they already have rcon.
 | 
						|
			if ( pPlayer->IsAutoKickDisabled() == false )
 | 
						|
				return;
 | 
						|
		}
 | 
						|
		else if ( gpGlobals->maxClients > 1 )
 | 
						|
		{
 | 
						|
			// On listen servers with more than 1 player, only allow the host to create point_servercommand.
 | 
						|
			CBasePlayer *pHostPlayer = UTIL_GetListenServerHost();
 | 
						|
			if ( pPlayer != pHostPlayer )
 | 
						|
				return;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	if ( !CreateEntityByName( pClassName ) )
 | 
						|
	{
 | 
						|
		Error( "Test_CreateEntity( %s ) failed.", pClassName );
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void Test_RandomPlayerPosition()
 | 
						|
{
 | 
						|
	CBasePlayer *pPlayer = UTIL_GetLocalPlayer();
 | 
						|
	CWorld *pWorld = GetWorldEntity();
 | 
						|
	if ( !pPlayer )
 | 
						|
	{
 | 
						|
		Error( "Test_RandomPlayerPosition: no local player entity." );
 | 
						|
	}
 | 
						|
	else if ( !pWorld )
 | 
						|
	{
 | 
						|
		Error( "Test_RandomPlayerPosition: no world entity." );
 | 
						|
	}
 | 
						|
 | 
						|
	
 | 
						|
	
 | 
						|
	Vector vMin, vMax;
 | 
						|
	pWorld->GetWorldBounds( vMin, vMax );
 | 
						|
 | 
						|
	Vector vecOrigin;
 | 
						|
	vecOrigin.x = RandomFloat( vMin.x, vMax.x );
 | 
						|
	vecOrigin.y = RandomFloat( vMin.y, vMax.y );
 | 
						|
	vecOrigin.z = RandomFloat( vMin.z, vMax.z );
 | 
						|
	pPlayer->ForceOrigin( vecOrigin );
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
ConCommand cc_Test_CreateEntity( "Test_CreateEntity", Test_CreateEntity, 0, FCVAR_CHEAT );
 | 
						|
ConCommand cc_Test_RandomPlayerPosition( "Test_RandomPlayerPosition", Test_RandomPlayerPosition, 0, FCVAR_CHEAT );
 | 
						|
 | 
						|
 |