void CAI_PlayerAlly::OnChangeRunningBehavior( CAI_BehaviorBase *pOldBehavior, CAI_BehaviorBase *pNewBehavior ) { BaseClass::OnChangeRunningBehavior( pOldBehavior, pNewBehavior ); CAI_FollowBehavior *pFollowBehavior; if ( dynamic_cast<CAI_FollowBehavior *>(pNewBehavior) != NULL ) { GetExpresser()->SetSpokeConcept( TLK_HELLO, NULL ); // Don't say hi after you've started following if ( IsOkToCombatSpeak() ) Speak( TLK_USE ); SetSpeechTarget( GetTarget() ); ClearCondition( COND_PLAYER_PUSHING ); } else if ( ( pFollowBehavior = dynamic_cast<CAI_FollowBehavior *>(pOldBehavior) ) != NULL ) { if ( !(m_afMemory & bits_MEMORY_PROVOKED) ) { if ( IsOkToCombatSpeak() ) { if ( pFollowBehavior->GetFollowTarget() == NULL ) Speak( TLK_UNUSE ); else Speak( TLK_STOP ); } SetSpeechTarget( FindNearestFriend(true) ); } } }
//--------------------------------------------------------- void CAI_PlayerAlly::OnTargetOrder() { if ( IsOkToCombatSpeak() ) Speak( TLK_COMMANDED ); BaseClass::OnTargetOrder(); }
//--------------------------------------------------------- void CAI_PlayerAlly::OnPlayerSelect() { if ( IsOkToCombatSpeak() ) Speak( TLK_SELECTED ); BaseClass::OnPlayerSelect(); }
//----------------------------------------------------------------------------- void CNPCSimpleTalker::InputIdleRespond( inputdata_t &inputdata ) { // We've been told to respond. Check combat speak, not isoktospeak, because // we don't want to check the idle speech time. if (!IsOkToCombatSpeak()) return; IdleRespond(); }
//------------------------------------------------------------------------------ // Purpose : // Input : // Output : //------------------------------------------------------------------------------ bool CAI_PlayerAlly::IsOkToSpeak( void ) { if ( !IsOkToCombatSpeak() ) return false; // don't talk if you're in combat if (GetEnemy() != NULL && FVisible( GetEnemy() )) return false; return ( !GetExpresser()->IsSpeaking() ); }
void CNPCSimpleTalker::OnStoppingFollow( CBaseEntity *pTarget ) { if ( !(m_afMemory & bits_MEMORY_PROVOKED) ) { if ( IsOkToCombatSpeak() ) { if ( pTarget == NULL ) Speak( TLK_STOPFOLLOW ); else Speak( TLK_STOP ); } SetSpeechTarget( FindNearestFriend(true) ); } }