92 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //:://////////////////////////////////////////////////
 | |
| //:: X0_CH_HEN_CONV
 | |
| //  OnDialogue event handler for henchmen/associates.
 | |
| //:://////////////////////////////////////////////////
 | |
| //:: Copyright (c) 2002 Floodgate Entertainment
 | |
| //:: Created By: Naomi Novik
 | |
| //:: Created On: 01/05/2003
 | |
| //:://////////////////////////////////////////////////
 | |
| #include "x0_inc_henai"
 | |
| #include "x0_i0_henchman"
 | |
| #include "0i_associates"
 | |
| //* GeorgZ - Put in a fix for henchmen talking even if they are petrified
 | |
| int AbleToTalk(object oSelf)
 | |
| {
 | |
|    if (GetHasEffect(EFFECT_TYPE_CONFUSED, oSelf) || GetHasEffect(EFFECT_TYPE_DOMINATED, oSelf) ||
 | |
|         GetHasEffect(EFFECT_TYPE_PETRIFY, oSelf) || GetHasEffect(EFFECT_TYPE_PARALYZE, oSelf)   ||
 | |
|         GetHasEffect(EFFECT_TYPE_STUNNED, oSelf) || GetHasEffect(EFFECT_TYPE_FRIGHTENED, oSelf)
 | |
|     )
 | |
|     {
 | |
|         return FALSE;
 | |
|     }
 | |
| 
 | |
|    return TRUE;
 | |
| }
 | |
| void main()
 | |
| {
 | |
|     object oCreature = OBJECT_SELF;
 | |
|     // * XP2, special handling code for interjections
 | |
|     // * This script only fires if someone inits with me.
 | |
|     // * with that in mind, I am now clearing any interjections
 | |
|     // * that the character might have on themselves.
 | |
|     if (GetLocalInt(GetModule(), "X2_L_XP2") == TRUE)
 | |
|     {
 | |
|         SetLocalInt(oCreature, "X2_BANTER_TRY", 0);
 | |
|         SetHasInterjection(GetMaster(oCreature), FALSE);
 | |
|         SetLocalInt(oCreature, "X0_L_BUSY_SPEAKING_ONE_LINER", 0);
 | |
|         SetOneLiner(FALSE, 0);
 | |
|     }
 | |
|     object oLastSpeaker = GetLastSpeaker();
 | |
|     if (GetTag(oCreature) == "x0_hen_dee")
 | |
|     {
 | |
|         string sCall = GetCampaignString("Deekin", "q6_Deekin_Call"+ GetName(oLastSpeaker), oLastSpeaker);
 | |
|         if (sCall == "") SetCustomToken(1001, GetStringByStrRef(40570));
 | |
|         else SetCustomToken(1001, sCall);
 | |
|     }
 | |
|     // If we are disabled then we can't listen or talk, Busy is checked in ai_SelectAssociateCommand().
 | |
|     if (GetIsHenchmanDying(oCreature) || ai_Disabled(oCreature)) return;
 | |
|     object oMaster = GetMaster();
 | |
|     int nMatch = GetListenPatternNumber();
 | |
|     object oIntruder;
 | |
|     if (nMatch == -1)
 | |
|     {
 | |
|         if (!ai_GetIsBusy(oCreature))
 | |
|         {
 | |
|             ai_ClearCreatureActions();
 | |
|             string sDialogFileToUse = GetDialogFileToUse(GetLastSpeaker());
 | |
|             BeginConversation(sDialogFileToUse);
 | |
|         }
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         // listening pattern matched
 | |
|         if (GetIsObjectValid(oMaster)) ai_SelectAssociateCommand(oCreature, oLastSpeaker, nMatch);
 | |
|         // we don't have a master, behave in default way
 | |
|         else if (GetIsObjectValid(oLastSpeaker) &&
 | |
|                  !GetIsPC(oLastSpeaker) &&
 | |
|                  GetIsFriend(oLastSpeaker))
 | |
|         {
 | |
|             object oIntruder = OBJECT_INVALID;
 | |
|             // Determine the intruder if any
 | |
|             if(nMatch == 4) oIntruder = GetLocalObject(oLastSpeaker, "NW_BLOCKER_INTRUDER");
 | |
|             else if (nMatch == 5)
 | |
|             {
 | |
|                 oIntruder = GetLastHostileActor(oLastSpeaker);
 | |
|                 if(!GetIsObjectValid(oIntruder))
 | |
|                 {
 | |
|                     oIntruder = GetAttemptedAttackTarget();
 | |
|                     if(!GetIsObjectValid(oIntruder)) oIntruder = GetAttemptedSpellTarget();
 | |
|                 }
 | |
|             }
 | |
|              // Actually respond to the shout
 | |
|              RespondToShout(oLastSpeaker, nMatch, oIntruder);
 | |
|          }
 | |
|     }
 | |
|     // Signal user-defined event
 | |
|     if(GetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT))
 | |
|     {
 | |
|         SignalEvent(oCreature, EventUserDefined(EVENT_DIALOGUE));
 | |
|     }
 | |
| }
 | |
| 
 |