Fixed old henchman bug in HotU. Updated tester module. Updated Campaign files. Updated release files.
		
			
				
	
	
		
			223 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
//:://////////////////////////////////////////////////
 | 
						|
//:: X0_CH_HEN_SPAWN
 | 
						|
//:: Copyright (c) 2002 Floodgate Entertainment
 | 
						|
//:://////////////////////////////////////////////////
 | 
						|
/*
 | 
						|
Henchman-specific OnSpawn handler for XP1. Based on NW_CH_AC9 by Bioware.
 | 
						|
 */
 | 
						|
//:://////////////////////////////////////////////////
 | 
						|
//:: Created By: Naomi Novik
 | 
						|
//:: Created On: 10/09/2002
 | 
						|
//:://////////////////////////////////////////////////
 | 
						|
 | 
						|
#include "x0_inc_henai"
 | 
						|
#include "x2_inc_banter"
 | 
						|
#include "x2_inc_globals"
 | 
						|
 | 
						|
// * there are only a couple potential interjections henchmen can say in c3
 | 
						|
void StrikeOutStrings(object oNathyrra)
 | 
						|
{
 | 
						|
    SetLocalString(oNathyrra, "X2_L_RANDOMONELINERS", "26|27|28|29|30|");
 | 
						|
    SetLocalString(oNathyrra, "X2_L_RANDOM_INTERJECTIONS", "6|7|");
 | 
						|
}
 | 
						|
            
 | 
						|
void main()
 | 
						|
{
 | 
						|
    string sAreaTag = GetTag(GetArea(OBJECT_SELF));
 | 
						|
    string sModuleTag = GetTag(GetModule());
 | 
						|
    string sMyTag = GetTag(OBJECT_SELF);
 | 
						|
 | 
						|
 | 
						|
    // * Setup how many random interjectiosn and popups they have
 | 
						|
    if (sMyTag == "x2_hen_deekin")
 | 
						|
    {
 | 
						|
        SetNumberOfRandom("X2_L_RANDOMONELINERS", OBJECT_SELF, 50);
 | 
						|
        SetNumberOfRandom("X2_L_RANDOM_INTERJECTIONS", OBJECT_SELF, 10);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    if (sMyTag == "x2_hen_daelan")
 | 
						|
    {
 | 
						|
        SetNumberOfRandom("X2_L_RANDOMONELINERS", OBJECT_SELF, 20);
 | 
						|
        SetNumberOfRandom("X2_L_RANDOM_INTERJECTIONS", OBJECT_SELF, 2);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    if (sMyTag == "x2_hen_linu")
 | 
						|
    {
 | 
						|
        SetNumberOfRandom("X2_L_RANDOMONELINERS", OBJECT_SELF, 20);
 | 
						|
        SetNumberOfRandom("X2_L_RANDOM_INTERJECTIONS", OBJECT_SELF, 2);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    if (sMyTag == "x2_hen_sharwyn")
 | 
						|
    {
 | 
						|
        SetNumberOfRandom("X2_L_RANDOMONELINERS", OBJECT_SELF, 20);
 | 
						|
        SetNumberOfRandom("X2_L_RANDOM_INTERJECTIONS", OBJECT_SELF, 4);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    if (sMyTag == "x2_hen_tomi")
 | 
						|
    {
 | 
						|
        SetNumberOfRandom("X2_L_RANDOMONELINERS", OBJECT_SELF, 20);
 | 
						|
        SetNumberOfRandom("X2_L_RANDOM_INTERJECTIONS", OBJECT_SELF, 4);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    if (sMyTag == "H2_Aribeth")
 | 
						|
    {
 | 
						|
        SetNumberOfRandom("X2_L_RANDOMONELINERS", OBJECT_SELF, 20);
 | 
						|
        SetNumberOfRandom("X2_L_RANDOM_INTERJECTIONS", OBJECT_SELF, 2);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    // * valen and Nathyrra have certain random lines that only show up in
 | 
						|
    // * in Chapter 2 (Chapter 3 they'll get this variable set on them
 | 
						|
    // * as well, with different numbers)
 | 
						|
    // * Basically #1-5 are Chapter 2 only, 26-30 are Chapter 3 only. The rest can show up anywhere
 | 
						|
    if (sMyTag == "x2_hen_nathyra" || sMyTag == "x2_hen_valen")
 | 
						|
    {
 | 
						|
        // * only fire this in Chapter 2. THey setup differently in the transition from C2 to C3
 | 
						|
        if (GetTag(GetModule()) == "x0_module2")
 | 
						|
        {
 | 
						|
            SetNumberOfRandom("X2_L_RANDOMONELINERS", OBJECT_SELF, 25);
 | 
						|
            SetNumberOfRandom("X2_L_RANDOM_INTERJECTIONS", OBJECT_SELF, 3);
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            StrikeOutStrings(OBJECT_SELF);
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    //Sets up the special henchmen listening patterns
 | 
						|
    SetAssociateListenPatterns();
 | 
						|
 | 
						|
    // Set additional henchman listening patterns
 | 
						|
    bkSetListeningPatterns();
 | 
						|
 | 
						|
    // Default behavior for henchmen at start
 | 
						|
    SetAssociateState(NW_ASC_POWER_CASTING);
 | 
						|
    SetAssociateState(NW_ASC_HEAL_AT_50);
 | 
						|
    SetAssociateState(NW_ASC_RETRY_OPEN_LOCKS);
 | 
						|
    SetAssociateState(NW_ASC_DISARM_TRAPS);
 | 
						|
    
 | 
						|
    // * July 2003. Set this to true so henchmen
 | 
						|
    // * will hopefully run off a little less often
 | 
						|
    // * by default
 | 
						|
    // * September 2003. Bad decision. Reverted back
 | 
						|
    // * to original. This mode too often looks like a bug
 | 
						|
    // * because they hang back and don't help each other out.
 | 
						|
    //SetAssociateState(NW_ASC_MODE_DEFEND_MASTER, TRUE);
 | 
						|
    SetAssociateState(NW_ASC_DISTANCE_2_METERS);
 | 
						|
 | 
						|
    //Use melee weapons by default
 | 
						|
    SetAssociateState(NW_ASC_USE_RANGED_WEAPON, FALSE);
 | 
						|
 | 
						|
    // Set starting location
 | 
						|
    SetAssociateStartLocation();
 | 
						|
 | 
						|
    // Set respawn location
 | 
						|
    SetRespawnLocation();
 | 
						|
 | 
						|
    // For some general behavior while we don't have a master,
 | 
						|
    // let's do some immobile animations
 | 
						|
    SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS);
 | 
						|
 | 
						|
    // **************************************
 | 
						|
    // * CHAPTER 1
 | 
						|
    // * Kill henchmen who spawn in
 | 
						|
    // * to any area for the first time
 | 
						|
    // * in Undermountain.
 | 
						|
    // **************************************
 | 
						|
    SetIsDestroyable(FALSE, TRUE, TRUE);
 | 
						|
    
 | 
						|
    // * September 2003
 | 
						|
    // * Scan through all equipped items and make
 | 
						|
    // * sure they are identified
 | 
						|
    int i = 0;
 | 
						|
    object oItem;
 | 
						|
    for (i = INVENTORY_SLOT_HEAD; i<=INVENTORY_SLOT_CARMOUR; i++)
 | 
						|
    {
 | 
						|
        oItem = GetItemInSlot(i, OBJECT_SELF);
 | 
						|
        if (GetIsObjectValid(oItem) == TRUE)
 | 
						|
            SetIdentified( oItem, TRUE);
 | 
						|
    }
 | 
						|
    
 | 
						|
// *
 | 
						|
// * Special CHAPTER 1 - XP2
 | 
						|
// * Levelup code
 | 
						|
// *
 | 
						|
if (sModuleTag == "x0_module1" && GetLocalInt(GetModule(), "X2_L_XP2") == TRUE)
 | 
						|
{
 | 
						|
    if (GetLocalInt(OBJECT_SELF, "X2_KilledInUndermountain") == 1)
 | 
						|
        return;
 | 
						|
    SetLocalInt(OBJECT_SELF, "X2_KilledInUndermountain", 1);
 | 
						|
 | 
						|
    // Level up henchman to level 13 if in Starting Room
 | 
						|
    // Join script will level them up correctly once hired
 | 
						|
    if (sAreaTag == "q2a_yawningportal")
 | 
						|
    {
 | 
						|
        int nLevel = 1;
 | 
						|
        for (nLevel = 1; nLevel < 14; nLevel++)
 | 
						|
        {
 | 
						|
            LevelUpHenchman(OBJECT_SELF);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    // 'kill the henchman'
 | 
						|
    // * do not kill if spawning in main room or specified area
 | 
						|
    string szAreaTag = GetTag(GetArea(OBJECT_SELF));
 | 
						|
    if (szAreaTag != "q2a_yawningportal" && szAreaTag != "q2c_um2east")
 | 
						|
    {
 | 
						|
        // Get the target creature by tag
 | 
						|
        object oTarget = GetObjectByTag(sMyTag);
 | 
						|
 | 
						|
        // Check if the target creature exists and its tag matches OBJECT_SELF's tag
 | 
						|
        if (GetIsObjectValid(oTarget) && GetTag(oTarget) == sMyTag)
 | 
						|
        {
 | 
						|
            effect eDamage = EffectDamage(1000); // Increased damage to ensure death
 | 
						|
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget); // Apply damage to the target
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
	
 | 
						|
/*     if (sModuleTag == "x0_module1" && GetLocalInt(GetModule(), "X2_L_XP2") == TRUE)
 | 
						|
    {
 | 
						|
        if (GetLocalInt(OBJECT_SELF, "X2_KilledInUndermountain") == 1)
 | 
						|
            return;
 | 
						|
        SetLocalInt(OBJECT_SELF, "X2_KilledInUndermountain", 1);
 | 
						|
 | 
						|
        //Level up henchman to level 13   if in Starting Room
 | 
						|
        //Join script will level them up correctly once hired
 | 
						|
        if (sAreaTag == "q2a_yawningportal" )
 | 
						|
        {
 | 
						|
            int nLevel = 1;
 | 
						|
            for (nLevel = 1; nLevel < 14; nLevel++)
 | 
						|
            {
 | 
						|
                LevelUpHenchman(OBJECT_SELF);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        //'kill the henchman'
 | 
						|
        
 | 
						|
        // * do not kill if spawning in main room
 | 
						|
        string szAreaTag = GetTag(GetArea(OBJECT_SELF));
 | 
						|
        if (szAreaTag != "q2a_yawningportal" && szAreaTag != "q2c_um2east")
 | 
						|
        {
 | 
						|
            //This breaks PRC custom cohorts
 | 
						|
            //effect eDamage = EffectDamage(500);
 | 
						|
            //DelayCommand(10.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, OBJECT_SELF));
 | 
						|
        }
 | 
						|
    } */
 | 
						|
    
 | 
						|
    // * Nathyrra in Chapter 1 is not allowed to have her inventory fiddled with
 | 
						|
    if (sMyTag == "x2_hen_nathyrra" && sModuleTag == "x0_module1")
 | 
						|
    {
 | 
						|
        SetLocalInt(OBJECT_SELF, "X2_JUST_A_DISABLEEQUIP", 1);
 | 
						|
    }
 | 
						|
    
 | 
						|
    
 | 
						|
    // *
 | 
						|
    // * if I am Aribeth then do my special level-up
 | 
						|
    // *
 | 
						|
    if (sMyTag == "H2_Aribeth")
 | 
						|
    {
 | 
						|
        LevelUpAribeth(OBJECT_SELF);
 | 
						|
    }
 | 
						|
}
 | 
						|
 |