2013-04-04 22:35:38 +00:00
// leave this line at the top for all g_xxxx.cpp files...
# include "g_headers.h"
# include "Q3_Interface.h"
# include "g_local.h"
# include "wp_saber.h"
extern void G_NextTestAxes ( void ) ;
extern void G_ChangePlayerModel ( gentity_t * ent , const char * newModel ) ;
extern void G_InitPlayerFromCvars ( gentity_t * ent ) ;
extern void Q3_SetViewEntity ( int entID , const char * name ) ;
extern qboolean G_ClearViewEntity ( gentity_t * ent ) ;
extern void G_Knockdown ( gentity_t * self , gentity_t * attacker , const vec3_t pushDir , float strength , qboolean breakSaberLock ) ;
extern void WP_SetSaber ( gentity_t * ent , int saberNum , char * saberName ) ;
extern void WP_RemoveSaber ( gentity_t * ent , int saberNum ) ;
extern saber_colors_t TranslateSaberColor ( const char * name ) ;
2013-04-04 23:21:13 +00:00
extern qboolean WP_SaberBladeUseSecondBladeStyle ( saberInfo_t * saber , int bladeNum ) ;
extern qboolean WP_UseFirstValidSaberStyle ( gentity_t * ent , int * saberAnimLevel ) ;
2013-04-04 22:35:38 +00:00
extern void G_SetWeapon ( gentity_t * self , int wp ) ;
extern stringID_table_t WPTable [ ] ;
extern cvar_t * g_char_model ;
extern cvar_t * g_char_skin_head ;
extern cvar_t * g_char_skin_torso ;
extern cvar_t * g_char_skin_legs ;
extern cvar_t * g_char_color_red ;
extern cvar_t * g_char_color_green ;
extern cvar_t * g_char_color_blue ;
extern cvar_t * g_saber ;
extern cvar_t * g_saber2 ;
extern cvar_t * g_saber_color ;
extern cvar_t * g_saber2_color ;
/*
= = = = = = = = = = = = = = = = = = =
Svcmd_EntityList_f
= = = = = = = = = = = = = = = = = = =
*/
void Svcmd_EntityList_f ( void ) {
int e ;
gentity_t * check ;
check = g_entities + 1 ;
for ( e = 1 ; e < globals . num_entities ; e + + , check + + ) {
if ( ! check - > inuse ) {
continue ;
}
gi . Printf ( " %3i: " , e ) ;
switch ( check - > s . eType ) {
case ET_GENERAL :
gi . Printf ( " ET_GENERAL " ) ;
break ;
case ET_PLAYER :
gi . Printf ( " ET_PLAYER " ) ;
break ;
case ET_ITEM :
gi . Printf ( " ET_ITEM " ) ;
break ;
case ET_MISSILE :
gi . Printf ( " ET_MISSILE " ) ;
break ;
case ET_MOVER :
gi . Printf ( " ET_MOVER " ) ;
break ;
case ET_BEAM :
gi . Printf ( " ET_BEAM " ) ;
break ;
default :
gi . Printf ( " #%i " , check - > s . eType ) ;
break ;
}
if ( check - > classname ) {
gi . Printf ( " %s " , check - > classname ) ;
}
gi . Printf ( " \n " ) ;
}
}
gclient_t * ClientForString ( const char * s ) {
gclient_t * cl ;
int i ;
int idnum ;
// numeric values are just slot numbers
if ( s [ 0 ] > = ' 0 ' & & s [ 0 ] < = ' 9 ' ) {
idnum = atoi ( s ) ;
if ( idnum < 0 | | idnum > = level . maxclients ) {
Com_Printf ( " Bad client slot: %i \n " , idnum ) ;
return NULL ;
}
cl = & level . clients [ idnum ] ;
if ( cl - > pers . connected = = CON_DISCONNECTED ) {
gi . Printf ( " Client %i is not connected \n " , idnum ) ;
return NULL ;
}
return cl ;
}
// check for a name match
for ( i = 0 ; i < level . maxclients ; i + + ) {
cl = & level . clients [ i ] ;
if ( cl - > pers . connected = = CON_DISCONNECTED ) {
continue ;
}
if ( ! Q_stricmp ( cl - > pers . netname , s ) ) {
return cl ;
}
}
gi . Printf ( " User %s is not on the server \n " , s ) ;
return NULL ;
}
//---------------------------
extern void G_StopCinematicSkip ( void ) ;
extern void G_StartCinematicSkip ( void ) ;
extern void ExitEmplacedWeapon ( gentity_t * ent ) ;
static void Svcmd_ExitView_f ( void )
{
extern cvar_t * g_skippingcin ;
static int exitViewDebounce = 0 ;
if ( exitViewDebounce > level . time )
{
return ;
}
exitViewDebounce = level . time + 500 ;
if ( in_camera )
{ //see if we need to exit an in-game cinematic
if ( g_skippingcin - > integer ) // already doing cinematic skip?
{ // yes... so stop skipping...
G_StopCinematicSkip ( ) ;
}
else
{ // no... so start skipping...
G_StartCinematicSkip ( ) ;
}
}
else if ( ! G_ClearViewEntity ( player ) )
{ //didn't exit control of a droid or turret
//okay, now try exiting emplaced guns or AT-ST's
if ( player - > s . eFlags & EF_LOCKED_TO_WEAPON )
{ //get out of emplaced gun
ExitEmplacedWeapon ( player ) ;
}
else if ( player - > client & & player - > client - > NPC_class = = CLASS_ATST )
{ //a player trying to get out of his ATST
GEntity_UseFunc ( player - > activator , player , player ) ;
}
}
}
gentity_t * G_GetSelfForPlayerCmd ( void )
{
if ( g_entities [ 0 ] . client - > ps . viewEntity > 0
& & g_entities [ 0 ] . client - > ps . viewEntity < ENTITYNUM_WORLD
& & g_entities [ g_entities [ 0 ] . client - > ps . viewEntity ] . client
& & g_entities [ g_entities [ 0 ] . client - > ps . viewEntity ] . s . weapon = = WP_SABER )
{ //you're controlling another NPC
return ( & g_entities [ g_entities [ 0 ] . client - > ps . viewEntity ] ) ;
}
else
{
return ( & g_entities [ 0 ] ) ;
}
}
static void Svcmd_Saber_f ( )
{
char * saber = gi . argv ( 1 ) ;
char * saber2 = gi . argv ( 2 ) ;
if ( ! g_entities [ 0 ] . client | | ! saber | | ! saber [ 0 ] )
{
return ;
}
gi . cvar_set ( " g_saber " , saber ) ;
WP_SetSaber ( & g_entities [ 0 ] , 0 , saber ) ;
2013-04-04 23:21:13 +00:00
if ( saber2 & & saber2 [ 0 ] & & ! ( g_entities [ 0 ] . client - > ps . saber [ 0 ] . saberFlags & SFL_TWO_HANDED ) )
2013-04-04 22:35:38 +00:00
{ //want to use a second saber and first one is not twoHanded
gi . cvar_set ( " g_saber2 " , saber2 ) ;
WP_SetSaber ( & g_entities [ 0 ] , 1 , saber2 ) ;
}
else
{
gi . cvar_set ( " g_saber2 " , " " ) ;
WP_RemoveSaber ( & g_entities [ 0 ] , 1 ) ;
}
}
static void Svcmd_SaberBlade_f ( )
{
if ( gi . argc ( ) < 2 )
{
gi . Printf ( " USAGE: saberblade <sabernum> <bladenum> [0 = off, 1 = on, no arg = toggle] \n " ) ;
return ;
}
if ( & g_entities [ 0 ] = = NULL | | & g_entities [ 0 ] . client = = NULL )
{
return ;
}
int sabernum = atoi ( gi . argv ( 1 ) ) - 1 ;
if ( sabernum < 0 | | sabernum > 1 )
{
return ;
}
if ( sabernum > 0 & & ! g_entities [ 0 ] . client - > ps . dualSabers )
{
return ;
}
//FIXME: what if don't even have a single saber at all?
int bladenum = atoi ( gi . argv ( 2 ) ) - 1 ;
if ( bladenum < 0 | | bladenum > = g_entities [ 0 ] . client - > ps . saber [ sabernum ] . numBlades )
{
return ;
}
qboolean turnOn ;
if ( gi . argc ( ) > 2 )
{ //explicit
turnOn = ( atoi ( gi . argv ( 3 ) ) ! = 0 ) ;
}
else
{ //toggle
turnOn = ( g_entities [ 0 ] . client - > ps . saber [ sabernum ] . blade [ bladenum ] . active = = qfalse ) ;
}
g_entities [ 0 ] . client - > ps . SaberBladeActivate ( sabernum , bladenum , turnOn ) ;
}
static void Svcmd_SaberColor_f ( )
{ //FIXME: just list the colors, each additional listing sets that blade
int saberNum = atoi ( gi . argv ( 1 ) ) ;
char * color [ MAX_BLADES ] ;
int bladeNum ;
for ( bladeNum = 0 ; bladeNum < MAX_BLADES ; bladeNum + + )
{
color [ bladeNum ] = gi . argv ( 2 + bladeNum ) ;
}
if ( ! VALIDSTRING ( color ) | | saberNum < 1 | | saberNum > 2 )
{
gi . Printf ( " Usage: saberColor <saberNum> <blade1 color> <blade2 color> ... <blade8 color> \n " ) ;
gi . Printf ( " valid saberNums: 1 or 2 \n " ) ;
gi . Printf ( " valid colors: red, orange, yellow, green, blue, and purple \n " ) ;
return ;
}
saberNum - - ;
gentity_t * self = G_GetSelfForPlayerCmd ( ) ;
for ( bladeNum = 0 ; bladeNum < MAX_BLADES ; bladeNum + + )
{
if ( ! color [ bladeNum ] | | ! color [ bladeNum ] [ 0 ] )
{
break ;
}
else
{
self - > client - > ps . saber [ saberNum ] . blade [ bladeNum ] . color = TranslateSaberColor ( color [ bladeNum ] ) ;
}
}
if ( saberNum = = 0 )
{
gi . cvar_set ( " g_saber_color " , color [ 0 ] ) ;
}
else if ( saberNum = = 1 )
{
gi . cvar_set ( " g_saber2_color " , color [ 0 ] ) ;
}
}
static void Svcmd_ForceJump_f ( void )
{
if ( ! & g_entities [ 0 ] | | ! g_entities [ 0 ] . client )
{
return ;
}
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return ;
}
char * newVal = gi . argv ( 1 ) ;
if ( ! VALIDSTRING ( newVal ) )
{
gi . Printf ( " Current forceJump level is %d \n " , g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_LEVITATION ] ) ;
gi . Printf ( " Usage: setForceJump <level> (1 - 3) \n " ) ;
return ;
}
int val = atoi ( newVal ) ;
if ( val > FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowersKnown | = ( 1 < < FP_LEVITATION ) ;
}
else
{
g_entities [ 0 ] . client - > ps . forcePowersKnown & = ~ ( 1 < < FP_LEVITATION ) ;
}
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_LEVITATION ] = val ;
if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_LEVITATION ] < FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_LEVITATION ] = FORCE_LEVEL_0 ;
}
else if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_LEVITATION ] > FORCE_LEVEL_3 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_LEVITATION ] = FORCE_LEVEL_3 ;
}
}
static void Svcmd_SaberThrow_f ( void )
{
if ( ! & g_entities [ 0 ] | | ! g_entities [ 0 ] . client )
{
return ;
}
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return ;
}
char * newVal = gi . argv ( 1 ) ;
if ( ! VALIDSTRING ( newVal ) )
{
gi . Printf ( " Current saberThrow level is %d \n " , g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABERTHROW ] ) ;
gi . Printf ( " Usage: setSaberThrow <level> (1 - 3) \n " ) ;
return ;
}
int val = atoi ( newVal ) ;
if ( val > FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowersKnown | = ( 1 < < FP_SABERTHROW ) ;
}
else
{
g_entities [ 0 ] . client - > ps . forcePowersKnown & = ~ ( 1 < < FP_SABERTHROW ) ;
}
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABERTHROW ] = val ;
if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABERTHROW ] < FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABERTHROW ] = FORCE_LEVEL_0 ;
}
else if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABERTHROW ] > FORCE_LEVEL_3 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABERTHROW ] = FORCE_LEVEL_3 ;
}
}
static void Svcmd_ForceHeal_f ( void )
{
if ( ! & g_entities [ 0 ] | | ! g_entities [ 0 ] . client )
{
return ;
}
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return ;
}
char * newVal = gi . argv ( 1 ) ;
if ( ! VALIDSTRING ( newVal ) )
{
gi . Printf ( " Current forceHeal level is %d \n " , g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_HEAL ] ) ;
gi . Printf ( " Usage: forceHeal <level> (1 - 3) \n " ) ;
return ;
}
int val = atoi ( newVal ) ;
if ( val > FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowersKnown | = ( 1 < < FP_HEAL ) ;
}
else
{
g_entities [ 0 ] . client - > ps . forcePowersKnown & = ~ ( 1 < < FP_HEAL ) ;
}
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_HEAL ] = val ;
if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_HEAL ] < FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_HEAL ] = FORCE_LEVEL_0 ;
}
else if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_HEAL ] > FORCE_LEVEL_3 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_HEAL ] = FORCE_LEVEL_3 ;
}
}
static void Svcmd_ForcePush_f ( void )
{
if ( ! & g_entities [ 0 ] | | ! g_entities [ 0 ] . client )
{
return ;
}
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return ;
}
char * newVal = gi . argv ( 1 ) ;
if ( ! VALIDSTRING ( newVal ) )
{
gi . Printf ( " Current forcePush level is %d \n " , g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_PUSH ] ) ;
gi . Printf ( " Usage: forcePush <level> (1 - 3) \n " ) ;
return ;
}
int val = atoi ( newVal ) ;
if ( val > FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowersKnown | = ( 1 < < FP_PUSH ) ;
}
else
{
g_entities [ 0 ] . client - > ps . forcePowersKnown & = ~ ( 1 < < FP_PUSH ) ;
}
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_PUSH ] = val ;
if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_PUSH ] < FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_PUSH ] = FORCE_LEVEL_0 ;
}
else if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_PUSH ] > FORCE_LEVEL_3 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_PUSH ] = FORCE_LEVEL_3 ;
}
}
static void Svcmd_ForcePull_f ( void )
{
if ( ! & g_entities [ 0 ] | | ! g_entities [ 0 ] . client )
{
return ;
}
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return ;
}
char * newVal = gi . argv ( 1 ) ;
if ( ! VALIDSTRING ( newVal ) )
{
gi . Printf ( " Current forcePull level is %d \n " , g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_PULL ] ) ;
gi . Printf ( " Usage: forcePull <level> (1 - 3) \n " ) ;
return ;
}
int val = atoi ( newVal ) ;
if ( val > FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowersKnown | = ( 1 < < FP_PULL ) ;
}
else
{
g_entities [ 0 ] . client - > ps . forcePowersKnown & = ~ ( 1 < < FP_PULL ) ;
}
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_PULL ] = val ;
if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_PULL ] < FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_PULL ] = FORCE_LEVEL_0 ;
}
else if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_PULL ] > FORCE_LEVEL_3 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_PULL ] = FORCE_LEVEL_3 ;
}
}
static void Svcmd_ForceSpeed_f ( void )
{
if ( ! & g_entities [ 0 ] | | ! g_entities [ 0 ] . client )
{
return ;
}
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return ;
}
char * newVal = gi . argv ( 1 ) ;
if ( ! VALIDSTRING ( newVal ) )
{
gi . Printf ( " Current forceSpeed level is %d \n " , g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SPEED ] ) ;
gi . Printf ( " Usage: forceSpeed <level> (1 - 3) \n " ) ;
return ;
}
int val = atoi ( newVal ) ;
if ( val > FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowersKnown | = ( 1 < < FP_SPEED ) ;
}
else
{
g_entities [ 0 ] . client - > ps . forcePowersKnown & = ~ ( 1 < < FP_SPEED ) ;
}
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SPEED ] = val ;
if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SPEED ] < FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SPEED ] = FORCE_LEVEL_0 ;
}
else if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SPEED ] > FORCE_LEVEL_3 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SPEED ] = FORCE_LEVEL_3 ;
}
}
static void Svcmd_ForceGrip_f ( void )
{
if ( ! & g_entities [ 0 ] | | ! g_entities [ 0 ] . client )
{
return ;
}
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return ;
}
char * newVal = gi . argv ( 1 ) ;
if ( ! VALIDSTRING ( newVal ) )
{
gi . Printf ( " Current forceGrip level is %d \n " , g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_GRIP ] ) ;
gi . Printf ( " Usage: forceGrip <level> (1 - 3) \n " ) ;
return ;
}
int val = atoi ( newVal ) ;
if ( val > FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowersKnown | = ( 1 < < FP_GRIP ) ;
}
else
{
g_entities [ 0 ] . client - > ps . forcePowersKnown & = ~ ( 1 < < FP_GRIP ) ;
}
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_GRIP ] = val ;
if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_GRIP ] < FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_GRIP ] = FORCE_LEVEL_0 ;
}
else if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_GRIP ] > FORCE_LEVEL_3 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_GRIP ] = FORCE_LEVEL_3 ;
}
}
static void Svcmd_ForceLightning_f ( void )
{
if ( ! & g_entities [ 0 ] | | ! g_entities [ 0 ] . client )
{
return ;
}
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return ;
}
char * newVal = gi . argv ( 1 ) ;
if ( ! VALIDSTRING ( newVal ) )
{
gi . Printf ( " Current forceLightning level is %d \n " , g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_LIGHTNING ] ) ;
gi . Printf ( " Usage: forceLightning <level> (1 - 3) \n " ) ;
return ;
}
int val = atoi ( newVal ) ;
if ( val > FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowersKnown | = ( 1 < < FP_LIGHTNING ) ;
}
else
{
g_entities [ 0 ] . client - > ps . forcePowersKnown & = ~ ( 1 < < FP_LIGHTNING ) ;
}
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_LIGHTNING ] = val ;
if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_LIGHTNING ] < FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_LIGHTNING ] = FORCE_LEVEL_0 ;
}
else if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_LIGHTNING ] > FORCE_LEVEL_3 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_LIGHTNING ] = FORCE_LEVEL_3 ;
}
}
static void Svcmd_MindTrick_f ( void )
{
if ( ! & g_entities [ 0 ] | | ! g_entities [ 0 ] . client )
{
return ;
}
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return ;
}
char * newVal = gi . argv ( 1 ) ;
if ( ! VALIDSTRING ( newVal ) )
{
gi . Printf ( " Current mindTrick level is %d \n " , g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_TELEPATHY ] ) ;
gi . Printf ( " Usage: mindTrick <level> (1 - 3) \n " ) ;
return ;
}
int val = atoi ( newVal ) ;
if ( val > FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowersKnown | = ( 1 < < FP_TELEPATHY ) ;
}
else
{
g_entities [ 0 ] . client - > ps . forcePowersKnown & = ~ ( 1 < < FP_TELEPATHY ) ;
}
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_TELEPATHY ] = val ;
if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_TELEPATHY ] < FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_TELEPATHY ] = FORCE_LEVEL_0 ;
}
else if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_TELEPATHY ] > FORCE_LEVEL_4 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_TELEPATHY ] = FORCE_LEVEL_4 ;
}
}
static void Svcmd_SaberDefense_f ( void )
{
if ( ! & g_entities [ 0 ] | | ! g_entities [ 0 ] . client )
{
return ;
}
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return ;
}
char * newVal = gi . argv ( 1 ) ;
if ( ! VALIDSTRING ( newVal ) )
{
gi . Printf ( " Current saberDefense level is %d \n " , g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABER_DEFENSE ] ) ;
gi . Printf ( " Usage: saberDefense <level> (1 - 3) \n " ) ;
return ;
}
int val = atoi ( newVal ) ;
if ( val > FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowersKnown | = ( 1 < < FP_SABER_DEFENSE ) ;
}
else
{
g_entities [ 0 ] . client - > ps . forcePowersKnown & = ~ ( 1 < < FP_SABER_DEFENSE ) ;
}
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABER_DEFENSE ] = val ;
if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABER_DEFENSE ] < FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABER_DEFENSE ] = FORCE_LEVEL_0 ;
}
else if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABER_DEFENSE ] > FORCE_LEVEL_3 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABER_DEFENSE ] = FORCE_LEVEL_3 ;
}
}
static void Svcmd_SaberOffense_f ( void )
{
if ( ! & g_entities [ 0 ] | | ! g_entities [ 0 ] . client )
{
return ;
}
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return ;
}
char * newVal = gi . argv ( 1 ) ;
if ( ! VALIDSTRING ( newVal ) )
{
gi . Printf ( " Current saberOffense level is %d \n " , g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABER_OFFENSE ] ) ;
gi . Printf ( " Usage: saberOffense <level> (1 - 3) \n " ) ;
return ;
}
int val = atoi ( newVal ) ;
if ( val > FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowersKnown | = ( 1 < < FP_SABER_OFFENSE ) ;
}
else
{
g_entities [ 0 ] . client - > ps . forcePowersKnown & = ~ ( 1 < < FP_SABER_OFFENSE ) ;
}
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABER_OFFENSE ] = val ;
if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABER_OFFENSE ] < FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABER_OFFENSE ] = FORCE_LEVEL_0 ;
}
else if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABER_OFFENSE ] > = SS_NUM_SABER_STYLES )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ FP_SABER_OFFENSE ] = SS_NUM_SABER_STYLES - 1 ;
}
}
static void Svcmd_ForceSetLevel_f ( int forcePower )
{
if ( ! & g_entities [ 0 ] | | ! g_entities [ 0 ] . client )
{
return ;
}
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return ;
}
char * newVal = gi . argv ( 1 ) ;
if ( ! VALIDSTRING ( newVal ) )
{
gi . Printf ( " Current force level is %d \n " , g_entities [ 0 ] . client - > ps . forcePowerLevel [ forcePower ] ) ;
gi . Printf ( " Usage: force <level> (1 - 3) \n " ) ;
return ;
}
int val = atoi ( newVal ) ;
if ( val > FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowersKnown | = ( 1 < < forcePower ) ;
}
else
{
g_entities [ 0 ] . client - > ps . forcePowersKnown & = ~ ( 1 < < forcePower ) ;
}
g_entities [ 0 ] . client - > ps . forcePowerLevel [ forcePower ] = val ;
if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ forcePower ] < FORCE_LEVEL_0 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ forcePower ] = FORCE_LEVEL_0 ;
}
else if ( g_entities [ 0 ] . client - > ps . forcePowerLevel [ forcePower ] > FORCE_LEVEL_3 )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ forcePower ] = FORCE_LEVEL_3 ;
}
}
extern qboolean PM_SaberInStart ( int move ) ;
extern qboolean PM_SaberInTransition ( int move ) ;
extern qboolean PM_SaberInAttack ( int move ) ;
2013-04-04 23:21:13 +00:00
extern qboolean WP_SaberCanTurnOffSomeBlades ( saberInfo_t * saber ) ;
2013-04-04 22:35:38 +00:00
void Svcmd_SaberAttackCycle_f ( void )
{
if ( ! & g_entities [ 0 ] | | ! g_entities [ 0 ] . client )
{
return ;
}
gentity_t * self = G_GetSelfForPlayerCmd ( ) ;
if ( self - > s . weapon ! = WP_SABER )
{ // saberAttackCycle button also switches to saber
gi . SendConsoleCommand ( " weapon 1 " ) ;
return ;
}
2013-04-04 23:21:13 +00:00
if ( self - > client - > ps . dualSabers )
2013-04-04 22:35:38 +00:00
{ //can't cycle styles with dualSabers, so just toggle second saber on/off
2013-04-04 23:21:13 +00:00
if ( WP_SaberCanTurnOffSomeBlades ( & self - > client - > ps . saber [ 1 ] ) )
{ //can turn second saber off
if ( self - > client - > ps . saber [ 1 ] . ActiveManualOnly ( ) )
{ //turn it off
qboolean skipThisBlade ;
for ( int bladeNum = 0 ; bladeNum < self - > client - > ps . saber [ 1 ] . numBlades ; bladeNum + + )
{
skipThisBlade = qfalse ;
if ( WP_SaberBladeUseSecondBladeStyle ( & self - > client - > ps . saber [ 1 ] , bladeNum ) )
{ //check to see if we should check the secondary style's flags
if ( ( self - > client - > ps . saber [ 1 ] . saberFlags2 & SFL2_NO_MANUAL_DEACTIVATE2 ) )
{
skipThisBlade = qtrue ;
}
}
else
{ //use the primary style's flags
if ( ( self - > client - > ps . saber [ 1 ] . saberFlags2 & SFL2_NO_MANUAL_DEACTIVATE ) )
{
skipThisBlade = qtrue ;
}
}
if ( ! skipThisBlade )
{
self - > client - > ps . saber [ 1 ] . BladeActivate ( bladeNum , qfalse ) ;
G_SoundIndexOnEnt ( self , CHAN_WEAPON , self - > client - > ps . saber [ 1 ] . soundOff ) ;
}
}
2013-04-04 22:35:38 +00:00
}
2013-04-04 23:21:13 +00:00
else if ( ! self - > client - > ps . saber [ 0 ] . ActiveManualOnly ( ) )
{ //first one is off, too, so just turn that one on
if ( ! self - > client - > ps . saberInFlight )
{ //but only if it's in your hand!
self - > client - > ps . saber [ 0 ] . Activate ( ) ;
}
}
else
{ //turn on the second one
self - > client - > ps . saber [ 1 ] . Activate ( ) ;
}
return ;
2013-04-04 22:35:38 +00:00
}
}
2013-04-04 23:21:13 +00:00
else if ( self - > client - > ps . saber [ 0 ] . numBlades > 1
& & WP_SaberCanTurnOffSomeBlades ( & self - > client - > ps . saber [ 0 ] ) ) //self->client->ps.saber[0].type == SABER_STAFF )
2013-04-04 22:35:38 +00:00
{ //can't cycle styles with saberstaff, so just toggles saber blades on/off
if ( self - > client - > ps . saberInFlight )
{ //can't turn second blade back on if it's in the air, you naughty boy!
return ;
}
2013-04-04 23:21:13 +00:00
/*
if ( self - > client - > ps . saber [ 0 ] . singleBladeStyle = = SS_NONE )
{ //can't use just one blade?
return ;
}
*/
2013-04-04 22:35:38 +00:00
qboolean playedSound = qfalse ;
if ( ! self - > client - > ps . saber [ 0 ] . blade [ 0 ] . active )
{ //first one is not even on
//turn only it on
self - > client - > ps . SaberBladeActivate ( 0 , 0 , qtrue ) ;
return ;
}
2013-04-04 23:21:13 +00:00
qboolean skipThisBlade ;
for ( int bladeNum = 1 ; bladeNum < self - > client - > ps . saber [ 0 ] . numBlades ; bladeNum + + )
2013-04-04 22:35:38 +00:00
{
2013-04-04 23:21:13 +00:00
if ( ! self - > client - > ps . saber [ 0 ] . blade [ bladeNum ] . active )
2013-04-04 22:35:38 +00:00
{ //extra is off, turn it on
2013-04-04 23:21:13 +00:00
self - > client - > ps . saber [ 0 ] . BladeActivate ( bladeNum , qtrue ) ;
2013-04-04 22:35:38 +00:00
}
else
{ //turn extra off
2013-04-04 23:21:13 +00:00
skipThisBlade = qfalse ;
if ( WP_SaberBladeUseSecondBladeStyle ( & self - > client - > ps . saber [ 1 ] , bladeNum ) )
{ //check to see if we should check the secondary style's flags
if ( ( self - > client - > ps . saber [ 1 ] . saberFlags2 & SFL2_NO_MANUAL_DEACTIVATE2 ) )
{
skipThisBlade = qtrue ;
}
}
else
{ //use the primary style's flags
if ( ( self - > client - > ps . saber [ 1 ] . saberFlags2 & SFL2_NO_MANUAL_DEACTIVATE ) )
{
skipThisBlade = qtrue ;
}
}
if ( ! skipThisBlade )
2013-04-04 22:35:38 +00:00
{
2013-04-04 23:21:13 +00:00
self - > client - > ps . saber [ 0 ] . BladeActivate ( bladeNum , qfalse ) ;
if ( ! playedSound )
{
G_SoundIndexOnEnt ( self , CHAN_WEAPON , self - > client - > ps . saber [ 0 ] . soundOff ) ;
playedSound = qtrue ;
}
2013-04-04 22:35:38 +00:00
}
}
}
return ;
}
2013-04-04 23:21:13 +00:00
int allowedStyles = self - > client - > ps . saberStylesKnown ;
if ( self - > client - > ps . dualSabers
& & self - > client - > ps . saber [ 0 ] . Active ( )
& & self - > client - > ps . saber [ 1 ] . Active ( ) )
{
allowedStyles | = ( 1 < < SS_DUAL ) ;
for ( int styleNum = SS_NONE + 1 ; styleNum < SS_NUM_SABER_STYLES ; styleNum + + )
{
if ( styleNum = = SS_TAVION
& & ( ( self - > client - > ps . saber [ 0 ] . stylesLearned & ( 1 < < SS_TAVION ) ) | | ( self - > client - > ps . saber [ 1 ] . stylesLearned & ( 1 < < SS_TAVION ) ) ) //was given this style by one of my sabers
& & ! ( self - > client - > ps . saber [ 0 ] . stylesForbidden & ( 1 < < SS_TAVION ) )
& & ! ( self - > client - > ps . saber [ 1 ] . stylesForbidden & ( 1 < < SS_TAVION ) ) )
{ //if have both sabers on, allow tavion only if one of our sabers specifically wanted to use it... (unless specifically forbidden)
}
else if ( styleNum = = SS_DUAL
& & ! ( self - > client - > ps . saber [ 0 ] . stylesForbidden & ( 1 < < SS_DUAL ) )
& & ! ( self - > client - > ps . saber [ 1 ] . stylesForbidden & ( 1 < < SS_DUAL ) ) )
{ //if have both sabers on, only dual style is allowed (unless specifically forbidden)
}
else
{
allowedStyles & = ~ ( 1 < < styleNum ) ;
}
}
}
2013-04-04 22:35:38 +00:00
2013-04-04 23:21:13 +00:00
if ( ! allowedStyles )
2013-04-04 22:35:38 +00:00
{
return ;
}
int saberAnimLevel ;
if ( ! self - > s . number )
{
saberAnimLevel = cg . saberAnimLevelPending ;
}
else
{
saberAnimLevel = self - > client - > ps . saberAnimLevel ;
}
saberAnimLevel + + ;
int sanityCheck = 0 ;
while ( self - > client - > ps . saberAnimLevel ! = saberAnimLevel
2013-04-04 23:21:13 +00:00
& & ! ( allowedStyles & ( 1 < < saberAnimLevel ) )
2013-04-04 22:35:38 +00:00
& & sanityCheck < SS_NUM_SABER_STYLES + 1 )
{
saberAnimLevel + + ;
if ( saberAnimLevel > SS_STAFF )
{
saberAnimLevel = SS_FAST ;
}
sanityCheck + + ;
}
2013-04-04 23:21:13 +00:00
if ( ! ( allowedStyles & ( 1 < < saberAnimLevel ) ) )
2013-04-04 22:35:38 +00:00
{
return ;
}
2013-04-04 23:21:13 +00:00
WP_UseFirstValidSaberStyle ( self , & saberAnimLevel ) ;
2013-04-04 22:35:38 +00:00
if ( ! self - > s . number )
{
cg . saberAnimLevelPending = saberAnimLevel ;
}
else
{
self - > client - > ps . saberAnimLevel = saberAnimLevel ;
}
# ifndef FINAL_BUILD
switch ( saberAnimLevel )
{
case SS_FAST :
gi . Printf ( S_COLOR_BLUE " Lightsaber Combat Style: Fast \n " ) ;
//LIGHTSABERCOMBATSTYLE_FAST
break ;
case SS_MEDIUM :
gi . Printf ( S_COLOR_YELLOW " Lightsaber Combat Style: Medium \n " ) ;
//LIGHTSABERCOMBATSTYLE_MEDIUM
break ;
case SS_STRONG :
gi . Printf ( S_COLOR_RED " Lightsaber Combat Style: Strong \n " ) ;
//LIGHTSABERCOMBATSTYLE_STRONG
break ;
case SS_DESANN :
gi . Printf ( S_COLOR_CYAN " Lightsaber Combat Style: Desann \n " ) ;
//LIGHTSABERCOMBATSTYLE_DESANN
break ;
case SS_TAVION :
gi . Printf ( S_COLOR_MAGENTA " Lightsaber Combat Style: Tavion \n " ) ;
//LIGHTSABERCOMBATSTYLE_TAVION
break ;
case SS_DUAL :
gi . Printf ( S_COLOR_MAGENTA " Lightsaber Combat Style: Dual \n " ) ;
//LIGHTSABERCOMBATSTYLE_TAVION
break ;
case SS_STAFF :
gi . Printf ( S_COLOR_MAGENTA " Lightsaber Combat Style: Staff \n " ) ;
//LIGHTSABERCOMBATSTYLE_TAVION
break ;
}
//gi.Printf("\n");
# endif
}
qboolean G_ReleaseEntity ( gentity_t * grabber )
{
if ( grabber & & grabber - > client & & grabber - > client - > ps . heldClient < ENTITYNUM_WORLD )
{
gentity_t * heldClient = & g_entities [ grabber - > client - > ps . heldClient ] ;
grabber - > client - > ps . heldClient = ENTITYNUM_NONE ;
if ( heldClient & & heldClient - > client )
{
heldClient - > client - > ps . heldByClient = ENTITYNUM_NONE ;
heldClient - > owner = NULL ;
}
return qtrue ;
}
return qfalse ;
}
void G_GrabEntity ( gentity_t * grabber , char * target )
{
if ( ! grabber | | ! grabber - > client )
{
return ;
}
gentity_t * heldClient = G_Find ( NULL , FOFS ( targetname ) , ( char * ) target ) ;
if ( heldClient & & heldClient - > client & & heldClient ! = grabber ) //don't grab yourself, it's not polite
{ //found him
grabber - > client - > ps . heldClient = heldClient - > s . number ;
heldClient - > client - > ps . heldByClient = grabber - > s . number ;
heldClient - > owner = grabber ;
}
}
/*
= = = = = = = = = = = = = = = = =
ConsoleCommand
// these are added in cg_main, CG_Init so they tab-complete
= = = = = = = = = = = = = = = = =
*/
qboolean ConsoleCommand ( void ) {
char * cmd ;
cmd = gi . argv ( 0 ) ;
if ( Q_stricmp ( cmd , " entitylist " ) = = 0 )
{
Svcmd_EntityList_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " game_memory " ) = = 0 ) {
Svcmd_GameMem_f ( ) ;
return qtrue ;
}
// if (Q_stricmp (cmd, "addbot") == 0) {
// Svcmd_AddBot_f();
// return qtrue;
// }
if ( Q_stricmp ( cmd , " nav " ) = = 0 )
{
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return qfalse ;
}
Svcmd_Nav_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " npc " ) = = 0 )
{
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return qfalse ;
}
Svcmd_NPC_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " use " ) = = 0 )
{
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return qfalse ;
}
Svcmd_Use_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " ICARUS " ) = = 0 )
{
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return qfalse ;
}
Quake3Game ( ) - > Svcmd ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " saberColor " ) = = 0 )
{
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return qfalse ;
}
Svcmd_SaberColor_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " saber " ) = = 0 )
{
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return qfalse ;
}
Svcmd_Saber_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " saberblade " ) = = 0 )
{
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return qfalse ;
}
Svcmd_SaberBlade_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setForceJump " ) = = 0 )
{
Svcmd_ForceJump_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setSaberThrow " ) = = 0 )
{
Svcmd_SaberThrow_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setForceHeal " ) = = 0 )
{
Svcmd_ForceHeal_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setForcePush " ) = = 0 )
{
Svcmd_ForcePush_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setForcePull " ) = = 0 )
{
Svcmd_ForcePull_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setForceSpeed " ) = = 0 )
{
Svcmd_ForceSpeed_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setForceGrip " ) = = 0 )
{
Svcmd_ForceGrip_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setForceLightning " ) = = 0 )
{
Svcmd_ForceLightning_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setMindTrick " ) = = 0 )
{
Svcmd_MindTrick_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setSaberDefense " ) = = 0 )
{
Svcmd_SaberDefense_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setSaberOffense " ) = = 0 )
{
Svcmd_SaberOffense_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setForceRage " ) = = 0 )
{
Svcmd_ForceSetLevel_f ( FP_RAGE ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setForceDrain " ) = = 0 )
{
Svcmd_ForceSetLevel_f ( FP_DRAIN ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setForceProtect " ) = = 0 )
{
Svcmd_ForceSetLevel_f ( FP_PROTECT ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setForceAbsorb " ) = = 0 )
{
Svcmd_ForceSetLevel_f ( FP_ABSORB ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setForceSight " ) = = 0 )
{
Svcmd_ForceSetLevel_f ( FP_SEE ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " setForceAll " ) = = 0 )
{
Svcmd_ForceJump_f ( ) ;
Svcmd_SaberThrow_f ( ) ;
Svcmd_ForceHeal_f ( ) ;
Svcmd_ForcePush_f ( ) ;
Svcmd_ForcePull_f ( ) ;
Svcmd_ForceSpeed_f ( ) ;
Svcmd_ForceGrip_f ( ) ;
Svcmd_ForceLightning_f ( ) ;
Svcmd_MindTrick_f ( ) ;
Svcmd_SaberDefense_f ( ) ;
Svcmd_SaberOffense_f ( ) ;
Svcmd_ForceSetLevel_f ( FP_RAGE ) ;
Svcmd_ForceSetLevel_f ( FP_DRAIN ) ;
Svcmd_ForceSetLevel_f ( FP_PROTECT ) ;
Svcmd_ForceSetLevel_f ( FP_ABSORB ) ;
Svcmd_ForceSetLevel_f ( FP_SEE ) ;
2013-04-04 23:21:13 +00:00
for ( int i = SS_NONE + 1 ; i < SS_NUM_SABER_STYLES ; i + + )
2013-04-04 22:35:38 +00:00
{
g_entities [ 0 ] . client - > ps . saberStylesKnown | = ( 1 < < i ) ;
}
return qtrue ;
}
if ( Q_stricmp ( cmd , " saberAttackCycle " ) = = 0 )
{
Svcmd_SaberAttackCycle_f ( ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " runscript " ) = = 0 )
{
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return qfalse ;
}
char * cmd2 = gi . argv ( 1 ) ;
if ( cmd2 & & cmd2 [ 0 ] )
{
char * cmd3 = gi . argv ( 2 ) ;
if ( cmd3 & & cmd3 [ 0 ] )
{
gentity_t * found = NULL ;
if ( ( found = G_Find ( NULL , FOFS ( targetname ) , cmd2 ) ) ! = NULL )
{
Quake3Game ( ) - > RunScript ( found , cmd3 ) ;
}
else
{
//can't find cmd2
gi . Printf ( S_COLOR_RED " runscript: can't find targetname %s \n " , cmd2 ) ;
}
}
else
{
Quake3Game ( ) - > RunScript ( & g_entities [ 0 ] , cmd2 ) ;
}
}
else
{
gi . Printf ( S_COLOR_RED " usage: runscript <ent targetname> scriptname \n " ) ;
}
//FIXME: else warning
return qtrue ;
}
if ( Q_stricmp ( cmd , " playerteam " ) = = 0 )
{
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return qfalse ;
}
char * cmd2 = gi . argv ( 1 ) ;
int n ;
if ( ! * cmd2 | | ! cmd2 [ 0 ] )
{
gi . Printf ( S_COLOR_RED " 'playerteam' - change player team, requires a team name! \n " ) ;
gi . Printf ( S_COLOR_RED " Valid team names are: \n " ) ;
for ( n = ( TEAM_FREE + 1 ) ; n < TEAM_NUM_TEAMS ; n + + )
{
gi . Printf ( S_COLOR_RED " %s \n " , GetStringForID ( TeamTable , n ) ) ;
}
}
else
{
team_t team ;
team = ( team_t ) GetIDForString ( TeamTable , cmd2 ) ;
if ( team = = - 1 )
{
gi . Printf ( S_COLOR_RED " 'playerteam' unrecognized team name %s! \n " , cmd2 ) ;
gi . Printf ( S_COLOR_RED " Valid team names are: \n " ) ;
for ( n = TEAM_FREE ; n < TEAM_NUM_TEAMS ; n + + )
{
gi . Printf ( S_COLOR_RED " %s \n " , GetStringForID ( TeamTable , n ) ) ;
}
}
else
{
g_entities [ 0 ] . client - > playerTeam = team ;
//FIXME: convert Imperial, Malon, Hirogen and Klingon to Scavenger?
}
}
return qtrue ;
}
if ( Q_stricmp ( cmd , " control " ) = = 0 )
{
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return qfalse ;
}
char * cmd2 = gi . argv ( 1 ) ;
if ( ! * cmd2 | | ! cmd2 [ 0 ] )
{
if ( ! G_ClearViewEntity ( & g_entities [ 0 ] ) )
{
gi . Printf ( S_COLOR_RED " control <NPC_targetname> \n " , cmd2 ) ;
}
}
else
{
Q3_SetViewEntity ( 0 , cmd2 ) ;
}
return qtrue ;
}
if ( Q_stricmp ( cmd , " grab " ) = = 0 )
{
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return qfalse ;
}
char * cmd2 = gi . argv ( 1 ) ;
if ( ! * cmd2 | | ! cmd2 [ 0 ] )
{
if ( ! G_ReleaseEntity ( & g_entities [ 0 ] ) )
{
gi . Printf ( S_COLOR_RED " grab <NPC_targetname> \n " , cmd2 ) ;
}
}
else
{
G_GrabEntity ( & g_entities [ 0 ] , cmd2 ) ;
}
return qtrue ;
}
if ( Q_stricmp ( cmd , " knockdown " ) = = 0 )
{
if ( ! g_cheats - > integer )
{
gi . SendServerCommand ( 0 , " print \" Cheats are not enabled on this server. \n \" " ) ;
return qfalse ;
}
G_Knockdown ( & g_entities [ 0 ] , & g_entities [ 0 ] , vec3_origin , 300 , qtrue ) ;
return qtrue ;
}
if ( Q_stricmp ( cmd , " playerModel " ) = = 0 )
{
if ( gi . argc ( ) = = 1 )
{
gi . Printf ( S_COLOR_RED " USAGE: playerModel <NPC Name> \n playerModel <g2model> <skinhead> <skintorso> <skinlower> \n playerModel player (builds player from customized menu settings) \n " ) ;
gi . Printf ( " playerModel = %s " , va ( " %s %s %s %s \n " , g_char_model - > string , g_char_skin_head - > string , g_char_skin_torso - > string , g_char_skin_legs - > string ) ) ;
}
else if ( gi . argc ( ) = = 2 )
{
G_ChangePlayerModel ( & g_entities [ 0 ] , gi . argv ( 1 ) ) ;
}
else if ( gi . argc ( ) = = 5 )
{
//instead of setting it directly via a command, we now store it in cvars
//G_ChangePlayerModel( &g_entities[0], va("%s|%s|%s|%s", gi.argv(1), gi.argv(2), gi.argv(3), gi.argv(4)) );
gi . cvar_set ( " g_char_model " , gi . argv ( 1 ) ) ;
gi . cvar_set ( " g_char_skin_head " , gi . argv ( 2 ) ) ;
gi . cvar_set ( " g_char_skin_torso " , gi . argv ( 3 ) ) ;
gi . cvar_set ( " g_char_skin_legs " , gi . argv ( 4 ) ) ;
G_InitPlayerFromCvars ( & g_entities [ 0 ] ) ;
}
return qtrue ;
}
if ( Q_stricmp ( cmd , " playerTint " ) = = 0 )
{
if ( gi . argc ( ) = = 4 )
{
g_entities [ 0 ] . client - > renderInfo . customRGBA [ 0 ] = atoi ( gi . argv ( 1 ) ) ;
g_entities [ 0 ] . client - > renderInfo . customRGBA [ 1 ] = atoi ( gi . argv ( 2 ) ) ;
g_entities [ 0 ] . client - > renderInfo . customRGBA [ 2 ] = atoi ( gi . argv ( 3 ) ) ;
gi . cvar_set ( " g_char_color_red " , gi . argv ( 1 ) ) ;
gi . cvar_set ( " g_char_color_green " , gi . argv ( 2 ) ) ;
gi . cvar_set ( " g_char_color_blue " , gi . argv ( 3 ) ) ;
}
else
{
gi . Printf ( S_COLOR_RED " USAGE: playerTint <red 0 - 255> <green 0 - 255> <blue 0 - 255> \n " ) ;
gi . Printf ( " playerTint = %s \n " , va ( " %d %d %d " , g_char_color_red - > integer , g_char_color_green - > integer , g_char_color_blue - > integer ) ) ;
}
return qtrue ;
}
if ( Q_stricmp ( cmd , " nexttestaxes " ) = = 0 )
{
G_NextTestAxes ( ) ;
}
if ( Q_stricmp ( cmd , " exitview " ) = = 0 )
{
Svcmd_ExitView_f ( ) ;
}
if ( Q_stricmp ( cmd , " iknowkungfu " ) = = 0 )
{
gi . cvar_set ( " g_debugMelee " , " 1 " ) ;
G_SetWeapon ( & g_entities [ 0 ] , WP_MELEE ) ;
for ( int i = FP_FIRST ; i < NUM_FORCE_POWERS ; i + + )
{
g_entities [ 0 ] . client - > ps . forcePowersKnown | = ( 1 < < i ) ;
if ( i = = FP_TELEPATHY )
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ i ] = FORCE_LEVEL_4 ;
}
else
{
g_entities [ 0 ] . client - > ps . forcePowerLevel [ i ] = FORCE_LEVEL_3 ;
}
}
}
return qfalse ;
}