qboolean G_ActivateBehavior (gentity_t *self, int bset ) { bState_t bSID = (bState_t)-1; char *bs_name = NULL; if ( !self ) { return qfalse; } bs_name = self->behaviorSet[bset]; if( !(VALIDSTRING( bs_name )) ) { return qfalse; } if ( self->NPC ) { bSID = (bState_t)(GetIDForString( BSTable, bs_name )); } if(bSID > -1) { self->NPC->tempBehavior = BS_DEFAULT; self->NPC->behaviorState = bSID; } else { /* char newname[MAX_FILENAME_LENGTH]; sprintf((char *) &newname, "%s/%s", Q3_SCRIPT_DIR, bs_name ); */ //FIXME: between here and actually getting into the ICARUS_RunScript function, the stack gets blown! if ( ( ICARUS_entFilter == -1 ) || ( ICARUS_entFilter == self->s.number ) ) { Q3_DebugPrint( WL_VERBOSE, "%s attempting to run bSet %s (%s)\n", self->targetname, GetStringForID( BSETTable, bset ), bs_name ); } ICARUS_RunScript( self, va( "%s/%s", Q3_SCRIPT_DIR, bs_name ) ); } return qtrue; }
/* ================= ConsoleCommand ================= */ 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; } Svcmd_ICARUS_f(); 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, "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, "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(); 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 ) { ICARUS_RunScript( found, va( "%s/%s", Q3_SCRIPT_DIR, cmd3 ) ); } else { //can't find cmd2 gi.Printf( S_COLOR_RED"runscript: can't find targetname %s\n", cmd2 ); } } else { ICARUS_RunScript( &g_entities[0], va( "%s/%s", Q3_SCRIPT_DIR, 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", TeamNames[n] ); } } else { team_t team; team = TranslateTeamName( cmd2 ); if ( team == TEAM_FREE ) { 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 + 1); n < TEAM_NUM_TEAMS; n++ ) { gi.Printf( S_COLOR_RED"%s\n", TeamNames[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 ); } } if ( Q_stricmp( cmd, "exitview" ) == 0 ) { Svcmd_ExitView_f(); } return qfalse; }
/* ================= ConsoleCommand ================= */ 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) { Svcmd_Nav_f (); return qtrue; } if (Q_stricmp (cmd, "npc") == 0) { Svcmd_NPC_f (); return qtrue; } if (Q_stricmp (cmd, "Command") == 0) { Svcmd_Comm_f (); return qtrue; } if (Q_stricmp (cmd, "Hail") == 0) { Svcmd_Hail_f (); return qtrue; } if (Q_stricmp (cmd, "makeFormation") == 0) { Svcmd_Form_f (); return qtrue; } if (Q_stricmp (cmd, "use") == 0) { Svcmd_Use_f (); return qtrue; } if (Q_stricmp (cmd, "detpack") == 0) { UseCharge (0); return qtrue; } if ( Q_stricmp( cmd, "ICARUS" ) == 0 ) { Svcmd_ICARUS_f(); return qtrue; } if ( Q_stricmp( cmd, "boltOn" ) == 0 ) { char *cmd2 = gi.argv(1); char *cmd3 = gi.argv(2); if ( cmd2 && cmd3 ) { if ( Q_stricmp( "add", cmd2 ) == 0 ) { g_entities[0].activeBoltOn = G_AddBoltOn( &g_entities[0], cmd3 ); return qtrue; } else if ( Q_stricmp( "remove", cmd2 ) == 0 ) { G_RemoveBoltOn( &g_entities[0], cmd3 ); return qtrue; } else if ( Q_stricmp( "frame", cmd2 ) == 0 ) { int endFrame = atoi(cmd3); Q3_SetActiveBoltOnStartFrame( 0, g_entities[0].client->renderInfo.boltOns[g_entities[0].activeBoltOn].frame ); Q3_SetActiveBoltOnEndFrame( 0, endFrame ); return qtrue; } } //Print list of valid commands gi.Printf( "boltOn commands:\n" ); gi.Printf( " add [boltOnName]\n" ); gi.Printf( " remove [boltOnName]\n" ); gi.Printf( " frame [frameNumber]\n" ); return qtrue; } if ( Q_stricmp( cmd, "runscript" ) == 0 ) { char *cmd2 = gi.argv(1); if ( cmd2 && cmd2[0] ) { gentity_t *found = NULL; if ( (found = G_Find(NULL, FOFS(targetname), cmd2 ) ) != NULL ) { char *cmd3 = gi.argv(2); if ( cmd3 && cmd3[0] ) { ICARUS_RunScript( found, va( "%s/%s", Q3_SCRIPT_DIR, cmd3 ) ); } } else { ICARUS_RunScript( &g_entities[0], va( "%s/%s", Q3_SCRIPT_DIR, cmd2 ) ); } } else { gi.Printf( S_COLOR_RED"usage: runscript <ent targetname> scriptname\n" ); } //FIXME: else warning return qtrue; } if ( Q_stricmp( cmd, "playerteam" ) == 0 ) { 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", TeamNames[n] ); } } else { team_t team; team = TranslateTeamName( cmd2 ); if ( team == TEAM_FREE ) { 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 + 1); n < TEAM_NUM_TEAMS; n++ ) { gi.Printf( S_COLOR_RED"%s\n", TeamNames[n] ); } } else { g_entities[0].client->playerTeam = team; //FIXME: convert Imperial, Malon, Hirogen and Klingon to Scavenger? } } return qtrue; } return qfalse; }
void scriptrunner_run (gentity_t *self) { /* if (self->behaviorSet[BSET_USE]) { char newname[MAX_FILENAME_LENGTH]; sprintf((char *) &newname, "%s/%s", Q3_SCRIPT_DIR, self->behaviorSet[BSET_USE] ); ICARUS_RunScript( self, newname ); } */ if ( self->count != -1 ) { if ( self->count <= 0 ) { self->e_UseFunc = useF_NULL; self->behaviorSet[BSET_USE] = NULL; return; } else { --self->count; } } if (self->behaviorSet[BSET_USE]) { if ( self->spawnflags & 1 ) { if ( !self->activator ) { Q3_DebugPrint( WL_ERROR, "target_scriptrunner tried to run on invalid entity!\n"); return; } if ( !self->activator->sequencer || !self->activator->taskManager ) {//Need to be initialized through ICARUS if ( !self->activator->script_targetname || !self->activator->script_targetname[0] ) { //We don't have a script_targetname, so create a new one self->activator->script_targetname = va( "newICARUSEnt%d", numNewICARUSEnts++ ); } if ( ICARUS_ValidEnt( self->activator ) ) { ICARUS_InitEnt( self->activator ); } else { Q3_DebugPrint( WL_ERROR, "target_scriptrunner tried to run on invalid ICARUS activator!\n"); return; } } Q3_DebugPrint( WL_VERBOSE, "target_scriptrunner running %s on activator %s\n", self->behaviorSet[BSET_USE], self->activator->targetname ); ICARUS_RunScript( self->activator, va( "%s/%s", Q3_SCRIPT_DIR, self->behaviorSet[BSET_USE] ) ); } else { if ( self->activator ) { Q3_DebugPrint( WL_VERBOSE, "target_scriptrunner %s used by %s\n", self->targetname, self->activator->targetname ); } G_ActivateBehavior( self, BSET_USE ); } } if ( self->wait ) { self->nextthink = level.time + self->wait; } }