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 ) ) if (0) { G_DebugPrint( WL_VERBOSE, "%s attempting to run bSet %s (%s)\n", self->targetname, GetStringForID( BSETTable, bset ), bs_name ); } //[CoOp] //make the code handle the case of the scripts directory already being given if(!Q_strncmp(bs_name, va( "%s/", Q3_SCRIPT_DIR ), 8 ) ) {//already has script directory specified. trap_ICARUS_RunScript( self, bs_name ); } else { trap_ICARUS_RunScript( self, va( "%s/%s", Q3_SCRIPT_DIR, bs_name ) ); } //trap_ICARUS_RunScript( self, va( "%s/%s", Q3_SCRIPT_DIR, bs_name ) ); //[/CoOp] } return qtrue; }
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 { //FIXME: between here and actually getting into the ICARUS_RunScript function, the stack gets blown! if (0) { G_DebugPrint( WL_VERBOSE, "%s attempting to run bSet %s (%s)\n", self->targetname, GetStringForID( BSETTable, bset ), bs_name ); } trap_ICARUS_RunScript( self, va( "%s/%s", Q3_SCRIPT_DIR, bs_name ) ); } return qtrue; }
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->use = 0; self->behaviorSet[BSET_USE] = NULL; return; } else { --self->count; } } if (self->behaviorSet[BSET_USE]) { if ( self->spawnflags & 1 ) { if ( !self->activator ) { if (g_developer.integer) { Com_Printf("target_scriptrunner tried to run on invalid entity!\n"); } return; } //if ( !self->activator->sequencer || !self->activator->taskManager ) if (!trap_ICARUS_IsInitialized(self->s.number)) {//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 ( trap_ICARUS_ValidEnt( self->activator ) ) { trap_ICARUS_InitEnt( self->activator ); } else { if (g_developer.integer) { Com_Printf("target_scriptrunner tried to run on invalid ICARUS activator!\n"); } return; } } if (g_developer.integer) { Com_Printf( "target_scriptrunner running %s on activator %s\n", self->behaviorSet[BSET_USE], self->activator->targetname ); } trap_ICARUS_RunScript( self->activator, va( "%s/%s", Q3_SCRIPT_DIR, self->behaviorSet[BSET_USE] ) ); } else { if ( g_developer.integer && self->activator ) { Com_Printf( "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; } }