You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.2 KiB
88 lines
2.2 KiB
//========= 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 ); |
|
|
|
|
|
|