void WaitNPCRespond ( gentity_t *self ) { //make sure the responding ent is still valid if ( !self->enemy || !self->enemy->client || !self->enemy->NPC ) { G_FreeEntity( self ); return; } if ( gi.S_Override[0] ) {//player is still talking self->nextthink = level.time + 500; //set enemy to not respond for a bit longer self->enemy->NPC->blockedSpeechDebounceTime = level.time + 1000; return; } if ( self->enemy->health <= 0 || (!self->alt_fire && (self->enemy->NPC->scriptFlags&SCF_NO_RESPONSE)) ) { G_FreeEntity( self ); return; } //set enemy to be ready to respond self->enemy->NPC->blockedSpeechDebounceTime = 0; if ( self->alt_fire ) {//Run the NPC's usescript G_ActivateBehavior( self->enemy, BSET_USE ); } else {//make them respond generically NPC_Respond( self->enemy, 0 ); } }
void NPC_UseResponse( gentity_t *self, gentity_t *user, qboolean useWhenDone ) { qboolean noGreet = qfalse; if ( !self->NPC || !self->client ) { return; } if ( user->s.number != 0 ) {//not used by the player if ( useWhenDone ) { G_ActivateBehavior( self, BSET_USE ); } return; } if ( user->client && self->client->playerTeam != user->client->playerTeam ) {//only those on the same team react if ( useWhenDone ) { G_ActivateBehavior( self, BSET_USE ); } return; } if ( self->NPC->blockedSpeechDebounceTime > level.time ) {//I'm not responding right now return; } if ( gi.S_Override[self->s.number] ) {//I'm talking already if ( !useWhenDone ) {//you're not trying to use me return; } else {//I'm talking, so don't greet me noGreet = qtrue; } } if ( !noGreet && user->s.number == 0 && G_PlayerGreet( self, useWhenDone ) ) { return; } if ( useWhenDone ) { G_ActivateBehavior( self, BSET_USE ); } else { NPC_Respond( self, user->s.number ); } }
void NPC_UseResponse( gentity_t *self, gentity_t *user, qboolean useWhenDone ) { if ( !self->NPC || !self->client ) { return; } //OJKFIXME: clientnum 0 if ( user->s.number != 0 ) {//not used by the player if ( useWhenDone ) { G_ActivateBehavior( self, BSET_USE ); } return; } if ( user->client && self->client->playerTeam != user->client->playerTeam && self->client->playerTeam != NPCTEAM_NEUTRAL ) {//only those on the same team react if ( useWhenDone ) { G_ActivateBehavior( self, BSET_USE ); } return; } if ( self->NPC->blockedSpeechDebounceTime > level.time ) {//I'm not responding right now return; } /* if ( gi.VoiceVolume[self->s.number] ) {//I'm talking already if ( !useWhenDone ) {//you're not trying to use me return; } } */ //rwwFIXMEFIXME: Support for this? if ( useWhenDone ) { G_ActivateBehavior( self, BSET_USE ); } else { NPC_Respond( self, user->s.number ); } }