forked from Jaysyn/PRC8
Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
109 lines
3.2 KiB
Plaintext
109 lines
3.2 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 "inc_utility"
|
|
#include "x0_inc_henai"
|
|
#include "x0_i0_henchman"
|
|
|
|
//* GeorgZ - Put in a fix for henchmen talking even if they are petrified
|
|
int AbleToTalk(object oSelf)
|
|
{
|
|
if (PRCGetHasEffect(EFFECT_TYPE_CONFUSED, oSelf) || PRCGetHasEffect(EFFECT_TYPE_DOMINATED, oSelf) ||
|
|
PRCGetHasEffect(EFFECT_TYPE_PETRIFY, oSelf) || PRCGetHasEffect(EFFECT_TYPE_PARALYZE, oSelf) ||
|
|
PRCGetHasEffect(EFFECT_TYPE_STUNNED, oSelf) || PRCGetHasEffect(EFFECT_TYPE_FRIGHTENED, oSelf)
|
|
)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void main()
|
|
{
|
|
|
|
if (GetIsHenchmanDying() == TRUE)
|
|
{
|
|
return;
|
|
}
|
|
|
|
object oShouter = GetLastSpeaker();
|
|
object oMaster = GetMaster();
|
|
object oIntruder;
|
|
int nMatch = GetListenPatternNumber();
|
|
|
|
if (nMatch == -1)
|
|
{
|
|
// * September 2 2003
|
|
// * Added the GetIsCommandable check back in so that
|
|
// * Henchman cannot be interrupted when they are walking away
|
|
if (GetCommandable(OBJECT_SELF) == TRUE && AbleToTalk(OBJECT_SELF)
|
|
&& (GetCurrentAction() != ACTION_OPENLOCK))
|
|
{ //SetCommandable(TRUE);
|
|
ClearActions(CLEAR_X0_CH_HEN_CONV_26);
|
|
|
|
|
|
string sDialogFileToUse = GetDialogFileToUse(GetLastSpeaker());
|
|
|
|
|
|
BeginConversation(sDialogFileToUse);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// listening pattern matched
|
|
if (GetIsObjectValid(oMaster))
|
|
{
|
|
// we have a master, only listen to them
|
|
// * Nov 2003 - Added an AbleToTalk, so that henchmen
|
|
// * do not respond to orders when 'frozen'
|
|
if (GetIsObjectValid(oShouter) && oMaster == oShouter && AbleToTalk(OBJECT_SELF)) {
|
|
SetCommandable(TRUE);
|
|
bkRespondToHenchmenShout(oShouter, nMatch, oIntruder);
|
|
}
|
|
}
|
|
|
|
// we don't have a master, behave in default way
|
|
else if (GetIsObjectValid(oShouter)
|
|
&& !GetIsPC(oShouter)
|
|
&& GetIsFriend(oShouter)) {
|
|
|
|
object oIntruder = OBJECT_INVALID;
|
|
|
|
// Determine the intruder if any
|
|
if(nMatch == 4) {
|
|
oIntruder = GetLocalObject(oShouter, "NW_BLOCKER_INTRUDER");
|
|
}
|
|
else if (nMatch == 5) {
|
|
oIntruder = GetLastHostileActor(oShouter);
|
|
if(!GetIsObjectValid(oIntruder)) {
|
|
oIntruder = GetAttemptedAttackTarget();
|
|
if(!GetIsObjectValid(oIntruder)) {
|
|
oIntruder = GetAttemptedSpellTarget();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Actually respond to the shout
|
|
RespondToShout(oShouter, nMatch, oIntruder);
|
|
}
|
|
}
|
|
|
|
|
|
// Signal user-defined event
|
|
if(GetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT)) {
|
|
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DIALOGUE));
|
|
}
|
|
}
|
|
|