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.
134 lines
4.3 KiB
Plaintext
134 lines
4.3 KiB
Plaintext
//:://////////////////////////////////////////////////
|
|
//:: X0_CH_HEN_CONV
|
|
/*
|
|
|
|
OnDialogue event handler for henchmen/associates.
|
|
|
|
This is used by the Cohorts for the PRC to trigger a
|
|
generic henchman conversation
|
|
|
|
*/
|
|
//:://////////////////////////////////////////////////
|
|
//:: Copyright (c) 2002 Floodgate Entertainment
|
|
//:: Created By: Naomi Novik
|
|
//:: Created On: 01/05/2003
|
|
//:://////////////////////////////////////////////////
|
|
|
|
|
|
#include "prc_alterations"
|
|
#include "inc_dynconv"
|
|
#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()
|
|
{
|
|
// * 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(OBJECT_SELF, "X2_BANTER_TRY", 0);
|
|
SetHasInterjection(GetMaster(OBJECT_SELF), FALSE);
|
|
SetLocalInt(OBJECT_SELF, "X0_L_BUSY_SPEAKING_ONE_LINER", 0);
|
|
SetOneLiner(FALSE, 0);
|
|
}
|
|
|
|
object oShouter = GetLastSpeaker();
|
|
|
|
// int i = GetLocalInt(OBJECT_SELF, sAssociateMasterConditionVarname);
|
|
// SendMessageToPC(GetFirstPC(), IntToHexString(i));
|
|
if (GetIsHenchmanDying() == TRUE)
|
|
{
|
|
return;
|
|
}
|
|
|
|
object oMaster = GetMaster();
|
|
int nMatch = GetListenPatternNumber();
|
|
|
|
object oIntruder;
|
|
|
|
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);
|
|
|
|
//PRC CHANGE
|
|
//BeginConversation("prc_cohort");
|
|
//use a dynamic conversation instead
|
|
|
|
// Make sure we're not already inside the dynconvo
|
|
if(!GetLocalInt(OBJECT_SELF, "PRC_InCohortConvoMarker"))
|
|
{
|
|
SetLocalInt(OBJECT_SELF, "PRC_InCohortConvoMarker", TRUE);
|
|
StartDynamicConversation("prc_cohort_convo", oShouter, DYNCONV_EXIT_ALLOWED_SHOW_CHOICE, TRUE, FALSE, OBJECT_SELF);
|
|
}
|
|
//PRC CHANGE
|
|
}
|
|
}
|
|
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));
|
|
}
|
|
}
|