187 lines
7.2 KiB
Plaintext
187 lines
7.2 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Associate: On Spawn In
|
|
//:: ra_hen_spw_fight
|
|
//:: Copyright (c) 2021 Project RATDOG
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
|
|
OnSpawn for randomized fighter henchman.
|
|
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jaysyn
|
|
//:: Created On: Oct 10, 2021
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "69_INC_HENAI"
|
|
#include "ms_name_inc"
|
|
#include "rnd_commoner_inc"
|
|
#include "ra_rnd_armor_inc"
|
|
|
|
|
|
void main()
|
|
{
|
|
// Apply randomizations.
|
|
RndFighterArmor(OBJECT_SELF);
|
|
|
|
ms_Nomenclature(OBJECT_SELF);
|
|
|
|
int nKeepskin = GetLocalInt(OBJECT_SELF,"RA_KEEPSKIN");
|
|
if (nKeepskin != 1)
|
|
{
|
|
rnd_skin(OBJECT_SELF);
|
|
}
|
|
|
|
rnd_skin(OBJECT_SELF);
|
|
|
|
int nKeephead = GetLocalInt(OBJECT_SELF,"RA_KEEPHEAD");
|
|
if (nKeephead != 1)
|
|
{
|
|
rnd_head(OBJECT_SELF);
|
|
}
|
|
|
|
int nKeeptats = GetLocalInt(OBJECT_SELF,"RA_KEEPTATS");
|
|
if (nKeeptats != 1)
|
|
{
|
|
rnd_tattoo(OBJECT_SELF);
|
|
}
|
|
//RESPAWN WAYPOINT INSTRUCTIONS
|
|
//Create a specific respawn location for henchman with a waypoint with TAG "WP_Respawn_'TAG'"
|
|
//where 'TAG' is the TAG of the NPC
|
|
//Create a default general respawn location with waypoint with TAG "NW_DEATH_TEMPLE"
|
|
//Create a Home waypoint with TAG "WP_Home_'TAG'" where 'TAG' is the TAG of the NPC
|
|
// This is where the Hench will go when they quit the PC
|
|
|
|
//Sets default level up package based on settings in henchman's blueprint
|
|
//This may be changed through henchman dialog, do not edit
|
|
SetLocalInt(OBJECT_SELF, "ClassPackage", GetCreatureStartingPackage(OBJECT_SELF));
|
|
//Set variable for level up, do not edit
|
|
SetLocalInt(OBJECT_SELF, "NewClass", -1);
|
|
|
|
//Sets up the HENCH_LAG for this henchman,
|
|
//Replace the 0 with any number the henchman lags(+)
|
|
//or leads(-) in level. Save this script as something
|
|
//else per this henchman. This allows multileveled
|
|
//henchman
|
|
//Minimum of -1,-2,-3... Maximum of 1,2,3... Same Level = 0
|
|
SetLocalInt(OBJECT_SELF, "HenchLag", 0);
|
|
|
|
//Sets the Maximum Level the Henchman may level
|
|
//Default: 40
|
|
SetLocalInt(OBJECT_SELF, "HENCH_MAXLEVEL", 40);
|
|
|
|
//Sets whether or not PC is allowed into henchman inventory
|
|
//TRUE: Inventory is accessible
|
|
//FALSE: Inventory is not accessible
|
|
//Default: TRUE
|
|
SetLocalInt(OBJECT_SELF, "HenchInv", TRUE);
|
|
|
|
//Sets whether or not initial henchman inventory is no drop
|
|
//TRUE: Inventory is droppable
|
|
//FALSE: Inventory is not droppable
|
|
//Default: TRUE
|
|
SetLocalInt(OBJECT_SELF, "HenchInvDrop", TRUE);
|
|
|
|
//Sets the distance from the enemy that the henchman will switch to melee weapons
|
|
SetLocalFloat(OBJECT_SELF, "HenchRange", 7.0);
|
|
|
|
//Sets up the special henchmen listening patterns
|
|
SetAssociateListenPatterns();
|
|
// Set additional henchman listening patterns
|
|
bkSetListeningPatterns();
|
|
|
|
//Equips melee weapon by default
|
|
//Equips ranged weapons by default if TRUE.
|
|
SetAssociateState(NW_ASC_USE_RANGED_WEAPON, FALSE);
|
|
|
|
//Sets the default distance that the henchman will follow
|
|
//the PC, only uncomment one of the following three
|
|
SetAssociateState(NW_ASC_DISTANCE_2_METERS);
|
|
//SetAssociateState(NW_ASC_DISTANCE_4_METERS);
|
|
//SetAssociateState(NW_ASC_DISTANCE_6_METERS);
|
|
//End default distances
|
|
|
|
SetAssociateState(NW_ASC_POWER_CASTING);
|
|
SetAssociateState(NW_ASC_HEAL_AT_50);
|
|
SetAssociateState(NW_ASC_RETRY_OPEN_LOCKS);
|
|
SetAssociateState(NW_ASC_DISARM_TRAPS);
|
|
SetAssociateState(NW_ASC_MODE_DEFEND_MASTER, FALSE);
|
|
|
|
// April 2002: Summoned monsters, associates and familiars need to stay
|
|
// further back due to their size.
|
|
if (GetAssociate(ASSOCIATE_TYPE_HENCHMAN, GetMaster()) == OBJECT_SELF ||
|
|
GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, GetMaster()) == OBJECT_SELF ||
|
|
GetAssociate(ASSOCIATE_TYPE_DOMINATED, GetMaster()) == OBJECT_SELF ||
|
|
GetAssociate(ASSOCIATE_TYPE_FAMILIAR, GetMaster()) == OBJECT_SELF ||
|
|
GetAssociate(ASSOCIATE_TYPE_SUMMONED, GetMaster()) == OBJECT_SELF)
|
|
{
|
|
SetAssociateState(NW_ASC_DISTANCE_4_METERS);
|
|
}
|
|
|
|
// SPECIAL CONVERSATION SETTTINGS
|
|
//SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION);
|
|
//SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION);
|
|
// This causes the creature to say a special greeting in their conversation file
|
|
// upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired
|
|
// greeting in order to designate it. As the creature is actually saying this to
|
|
// himself, don't attach any player responses to the greeting.
|
|
|
|
//Set starting location
|
|
SetAssociateStartLocation();
|
|
|
|
// For some general behavior while we don't have a master,
|
|
// let's do some immobile animations
|
|
// SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS);
|
|
|
|
// For some general behavior while we don't have a master,
|
|
// let's do some mobile animations
|
|
// SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS);
|
|
|
|
|
|
// **** Special Combat Tactics *****//
|
|
// * These are special flags that can be set on creatures to
|
|
// * make them follow certain specialized combat tactics.
|
|
// * NOTE: ONLY ONE OF THESE SHOULD BE SET ON A SINGLE CREATURE.
|
|
|
|
// * Ranged attacker
|
|
// * Will attempt to stay at ranged distance from their
|
|
// * target.
|
|
// SetCombatCondition(X0_COMBAT_FLAG_RANGED);
|
|
|
|
// * Defensive attacker
|
|
// * Will use defensive combat feats and parry
|
|
// SetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE);
|
|
|
|
// * Ambusher
|
|
// * Will go stealthy/invisible and attack, then
|
|
// * run away and try to go stealthy again before
|
|
// * attacking anew.
|
|
// SetCombatCondition(X0_COMBAT_FLAG_AMBUSHER);
|
|
|
|
// * Cowardly
|
|
// * Cowardly creatures will attempt to flee
|
|
// * attackers.
|
|
// SetCombatCondition(X0_COMBAT_FLAG_COWARDLY);
|
|
|
|
// CUSTOM USER DEFINED EVENTS
|
|
/*
|
|
The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the
|
|
On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined
|
|
events user 1000 - 1010
|
|
*/
|
|
//SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002
|
|
//SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005
|
|
//SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006
|
|
//SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008
|
|
//SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003
|
|
//SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004
|
|
//SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007
|
|
|
|
ActionEquipMostEffectiveArmor();
|
|
|
|
if(GetLocalInt(OBJECT_SELF, "HenchInvDrop") == FALSE)
|
|
{
|
|
HenchmanNoDropItems69(TRUE, OBJECT_SELF);
|
|
}
|
|
}
|