Randomized Henchmen
Randomized Henchmen
This commit is contained in:
		| @@ -10,8 +10,10 @@ | ||||
|  | ||||
| #include "69_INC_HENAI" | ||||
|  | ||||
|  | ||||
| void main() | ||||
| { | ||||
|  | ||||
|     //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 | ||||
| @@ -50,7 +52,7 @@ void main() | ||||
|     SetLocalInt(OBJECT_SELF, "HenchInvDrop", TRUE); | ||||
|  | ||||
|     //Sets the distance from the enemy that the henchman will switch to melee weapons | ||||
|     SetLocalFloat(OBJECT_SELF, "HenchRange", 5.0); | ||||
|     SetLocalFloat(OBJECT_SELF, "HenchRange", 10.0); | ||||
|  | ||||
|     //Sets up the special henchmen listening patterns | ||||
|     SetAssociateListenPatterns(); | ||||
| @@ -144,6 +146,8 @@ void main() | ||||
|     //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 | ||||
|  | ||||
|  | ||||
|  | ||||
|     if(GetLocalInt(OBJECT_SELF, "HenchInvDrop") == FALSE) | ||||
|     { | ||||
|       HenchmanNoDropItems69(TRUE, OBJECT_SELF); | ||||
|   | ||||
| @@ -5,38 +5,50 @@ | ||||
| //  By Thrym of Markshire  5/21/06                                            // | ||||
| //                                                                            // | ||||
| //////////////////////////////////////////////////////////////////////////////// | ||||
| //                                                                            // | ||||
| //  FUNCTION:                                                                 // | ||||
| //  The Nomenclature is an include file placed in the spawn script            // | ||||
| //  nw_c2_default9 designed to assign a name to a generic NPC who may         // | ||||
| //  wander towns, roads, shops, etc.                                          // | ||||
| //                                                                            // | ||||
| //  Utilizing both SetName and RandomName the system will name the NPC in     // | ||||
| //  one of two ways ...                                                       // | ||||
| //                                                                            // | ||||
| //  "SET_NAME":  By setting the variable "SET_NAME" on the NPC and            // | ||||
| //  assigning it a string the creature will rename itself upon spawning.      // | ||||
| //  This is handy for DM's and builders to create more precisely named        // | ||||
| //  creatures for the palette and then generize them upon spawn.              // | ||||
| //                                                                            // | ||||
| //  eg. Ancient White Dragon in the Creator becomes White Dragon on Spawn.    // | ||||
| //                                                                            // | ||||
| //  "SET_NAME" = "RANDOM":  By setting the same variable to the name "RANDOM" // | ||||
| //  the NPC then is given a random name generated by RACE and GENDER using    // | ||||
| //  the RandomName function.                                                  // | ||||
| //                                                                            // | ||||
| //  eg.  Male Dwarven Villager in the creator becomes Gloigan on spawn        // | ||||
| //  this time and perhaps Rufus on the next spawned Villager.                 // | ||||
| //                                                                            // | ||||
| //  "NAME_TYPE":  Setting this int variable to "1" will cause a Full Name     // | ||||
| //  to be generated if the "SET_NAME" is set to "RANDOM".                     // | ||||
| //                                                                            // | ||||
| //  eg.  Male Dwarven Villager becomes Gloigan Stonecutter or Rufus Mason.    // | ||||
| //                                                                            // | ||||
| //////////////////////////////////////////////////////////////////////////////// | ||||
| /* | ||||
| //  FUNCTION: | ||||
| //  The Nomenclature is an include file placed in the spawn script | ||||
| //  nw_c2_default9 designed to assign a name to a generic NPC who may | ||||
| //  wander towns, roads, shops, etc. | ||||
| // | ||||
| //  Utilizing both SetName and RandomName the system will name the NPC in | ||||
| //  one of two ways ... | ||||
| // | ||||
| //  "SET_NAME":  By setting the variable "SET_NAME" on the NPC and | ||||
| //  assigning it a string the creature will rename itself upon spawning. | ||||
| //  This is handy for DM's and builders to create more precisely named | ||||
| //  creatures for the palette and then generize them upon spawn. | ||||
| // | ||||
| //  eg. Ancient White Dragon in the Creator becomes White Dragon on Spawn. | ||||
| // | ||||
| //  "SET_NAME" = "RANDOM":  By setting the same variable to the name "RANDOM" | ||||
| //  the NPC then is given a random name generated by RACE and GENDER using | ||||
| //  the RandomName function. | ||||
| // | ||||
| //  eg.  Male Dwarven Villager in the creator becomes Gloigan on spawn | ||||
| //  this time and perhaps Rufus on the next spawned Villager. | ||||
| // | ||||
| //  "NAME_TYPE":  Setting this int variable to "1" will cause a Full Name | ||||
| //  to be generated if the "SET_NAME" is set to "RANDOM". | ||||
| // | ||||
| //  eg.  Male Dwarven Villager becomes Gloigan Stonecutter or Rufus Mason. | ||||
|  | ||||
|     "RND_ROGUE" | ||||
|     "RND_BARBARIAN" | ||||
|     "RND_FIGHTER" | ||||
|     "RND_CLERIC"    : Setting these to "1" will give the NPC a class appropriate | ||||
|     "RND_MAGE"      : title | ||||
|     "RND_DRUID" | ||||
|     "RND_RANGER" | ||||
|  | ||||
|  | ||||
| // | ||||
| // | ||||
| //////////////////////////////////////////////////////////////////////////////*/ | ||||
|  | ||||
| //void main (){} | ||||
|  | ||||
|  | ||||
| ///// FUNCTION DECLARATIONS //////////////////////////////////////////////////// | ||||
|  | ||||
| // Generates a Random First Name | ||||
| @@ -66,13 +78,245 @@ void ms_Nomenclature(object oNPC = OBJECT_SELF) | ||||
|     string sTitle = GetLocalString(oNPC, "TITLE"); | ||||
|     string sPostfix = GetLocalString(oNPC, "POSTFIX"); | ||||
|  | ||||
|     int nRndRogue = GetLocalInt(OBJECT_SELF,"RND_ROGUE"); | ||||
|         if (nRndRogue == 1) | ||||
|             { | ||||
|                 int nResult = d6(1); | ||||
|                 if (nResult == 1) | ||||
|                     { | ||||
|                         sPostfix = "the Quick"; | ||||
|                     } | ||||
|                 else if(nResult == 2) | ||||
|                     { | ||||
|                         sPostfix = "the Quiet"; | ||||
|                     } | ||||
|                 else if(nResult == 3) | ||||
|                     { | ||||
|                         sPostfix = "the Sharp"; | ||||
|                     } | ||||
|                 else if(nResult ==4) | ||||
|                     { | ||||
|                         sPostfix = "the Sneak"; | ||||
|                     } | ||||
|                 else if(nResult == 5) | ||||
|                     { | ||||
|                         sPostfix = "the Rogue"; | ||||
|                     } | ||||
|                 else | ||||
|                         sPostfix = "the Footpad"; | ||||
|  | ||||
|             } | ||||
|  | ||||
|     int nRndBarb = GetLocalInt(OBJECT_SELF,"RND_BARBARIAN"); | ||||
|         if (nRndBarb == 1) | ||||
|             { | ||||
|                 int nResult = d6(1); | ||||
|                 if (nResult == 1) | ||||
|                     { | ||||
|                         sPostfix = "the Barbarian"; | ||||
|                     } | ||||
|                 else if(nResult == 2) | ||||
|                     { | ||||
|                         sPostfix = "the Destroyer"; | ||||
|                     } | ||||
|                 else if(nResult == 3) | ||||
|                     { | ||||
|                         sPostfix = "of the Plains"; | ||||
|                     } | ||||
|                 else if(nResult ==4) | ||||
|                     { | ||||
|                         sPostfix = "of Tiger Clan"; | ||||
|                     } | ||||
|                 else if(nResult == 5) | ||||
|                     { | ||||
|                         sPostfix = "of Bear Clan"; | ||||
|                     } | ||||
|                 else | ||||
|                         sPostfix = "the Avenger"; | ||||
|  | ||||
|             } | ||||
|  | ||||
|     int nRndFight = GetLocalInt(OBJECT_SELF,"RND_FIGHTER"); | ||||
|         if (nRndFight == 1) | ||||
|             { | ||||
|                 int nResult = d6(1); | ||||
|                 if (nResult == 1) | ||||
|                     { | ||||
|                         sPostfix = "the Strong"; | ||||
|                     } | ||||
|                 else if(nResult == 2) | ||||
|                     { | ||||
|                         sPostfix = "the Stout"; | ||||
|                     } | ||||
|                 else if(nResult == 3) | ||||
|                     { | ||||
|                         sPostfix = "of the Blade"; | ||||
|                     } | ||||
|                 else if(nResult ==4) | ||||
|                     { | ||||
|                         sPostfix = "of Neverwinter"; | ||||
|                     } | ||||
|                 else if(nResult == 5) | ||||
|                     { | ||||
|                         sPostfix = "of Amn"; | ||||
|                     } | ||||
|                 else | ||||
|                         sPostfix = "the Swordhand"; | ||||
|  | ||||
|             } | ||||
|  | ||||
|     int nRndCleric = GetLocalInt(OBJECT_SELF,"RND_CLERIC"); | ||||
|         if (nRndCleric == 1) | ||||
|             { | ||||
|                 int nResult = d6(1); | ||||
|                 if (nResult == 1) | ||||
|                     { | ||||
|                         sPostfix = "the Pious"; | ||||
|                     } | ||||
|                 else if(nResult == 2) | ||||
|                     { | ||||
|                         sPostfix = "the Holy"; | ||||
|                     } | ||||
|                 else if(nResult == 3) | ||||
|                     { | ||||
|                         sPostfix = "the Priest"; | ||||
|                     } | ||||
|                 else if(nResult ==4) | ||||
|                     { | ||||
|                         sPostfix = "the Zealous"; | ||||
|                     } | ||||
|                 else if(nResult == 5) | ||||
|                     { | ||||
|                         sPostfix = "of Phlan"; | ||||
|                     } | ||||
|                 else | ||||
|                         sPostfix = "the Wise"; | ||||
|  | ||||
|             } | ||||
|  | ||||
|     int nRndMage = GetLocalInt(OBJECT_SELF,"RND_MAGE"); | ||||
|         if (nRndMage == 1) | ||||
|             { | ||||
|                 int nResult = d6(1); | ||||
|                 if (nResult == 1) | ||||
|                     { | ||||
|                         sPostfix = "the Mad"; | ||||
|                     } | ||||
|                 else if(nResult == 2) | ||||
|                     { | ||||
|                         sPostfix = "the Arcane"; | ||||
|                     } | ||||
|                 else if(nResult == 3) | ||||
|                     { | ||||
|                         sPostfix = "the Black"; | ||||
|                     } | ||||
|                 else if(nResult ==4) | ||||
|                     { | ||||
|                         sPostfix = "the Wizard"; | ||||
|                     } | ||||
|                 else if(nResult == 5) | ||||
|                     { | ||||
|                         sPostfix = "of Waterdeep"; | ||||
|                     } | ||||
|                 else | ||||
|                         sPostfix = "the Mage"; | ||||
|  | ||||
|             } | ||||
|  | ||||
|     int nRndBard = GetLocalInt(OBJECT_SELF,"RND_BARD"); | ||||
|         if (nRndMage == 1) | ||||
|             { | ||||
|                 int nResult = d6(1); | ||||
|                 if (nResult == 1) | ||||
|                     { | ||||
|                         sPostfix = "the Dancer"; | ||||
|                     } | ||||
|                 else if(nResult == 2) | ||||
|                     { | ||||
|                         sPostfix = "the Troubador"; | ||||
|                     } | ||||
|                 else if(nResult == 3) | ||||
|                     { | ||||
|                         sPostfix = "of the Song"; | ||||
|                     } | ||||
|                 else if(nResult ==4) | ||||
|                     { | ||||
|                         sPostfix = "the Bard"; | ||||
|                     } | ||||
|                 else if(nResult == 5) | ||||
|                     { | ||||
|                         sPostfix = "the Raconteur"; | ||||
|                     } | ||||
|                 else | ||||
|                         sPostfix = "the Minstrel"; | ||||
|  | ||||
|             } | ||||
|  | ||||
|     int nRndDruid = GetLocalInt(OBJECT_SELF,"RND_DRUID"); | ||||
|         if (nRndDruid == 1) | ||||
|             { | ||||
|                 int nResult = d6(1); | ||||
|                 if (nResult == 1) | ||||
|                     { | ||||
|                         sPostfix = "the Druid"; | ||||
|                     } | ||||
|                 else if(nResult == 2) | ||||
|                     { | ||||
|                         sPostfix = "of the Forest"; | ||||
|                     } | ||||
|                 else if(nResult == 3) | ||||
|                     { | ||||
|                         sPostfix = "of the Wild"; | ||||
|                     } | ||||
|                 else if(nResult ==4) | ||||
|                     { | ||||
|                         sPostfix = "the Wolflord"; | ||||
|                     } | ||||
|                 else if(nResult == 5) | ||||
|                     { | ||||
|                         sPostfix = "the Treelord"; | ||||
|                     } | ||||
|                 else | ||||
|                         sPostfix = "the Warden"; | ||||
|  | ||||
|             } | ||||
|  | ||||
|     int nRndRanger = GetLocalInt(OBJECT_SELF,"RND_RANGER"); | ||||
|         if (nRndRanger == 1) | ||||
|             { | ||||
|                 int nResult = d6(1); | ||||
|                 if (nResult == 1) | ||||
|                     { | ||||
|                         sPostfix = "the Ranger"; | ||||
|                     } | ||||
|                 else if(nResult == 2) | ||||
|                     { | ||||
|                         sPostfix = "of the Forest"; | ||||
|                     } | ||||
|                 else if(nResult == 3) | ||||
|                     { | ||||
|                         sPostfix = "of the Wild"; | ||||
|                     } | ||||
|                 else if(nResult ==4) | ||||
|                     { | ||||
|                         sPostfix = "the Strider"; | ||||
|                     } | ||||
|                 else if(nResult == 5) | ||||
|                     { | ||||
|                         sPostfix = "the Venger"; | ||||
|                     } | ||||
|                 else | ||||
|                         sPostfix = "the Warden"; | ||||
|  | ||||
|             } | ||||
|  | ||||
|     if (sRandomName != "") | ||||
|     { | ||||
|         if (sRandomName == "RANDOM") | ||||
|         { | ||||
|             switch (GetLocalInt(oNPC, "NAME_TYPE")) | ||||
|             { | ||||
|                 case 1:   sRandomName = sTitle + " " + ms_RandomFirstName(oNPC) + " " + ms_RandomLastName(oNPC); break; | ||||
|                 case 1:   sRandomName = sTitle + " " + ms_RandomFirstName(oNPC) + " " + ms_RandomLastName(oNPC)+ " " + sPostfix; break; | ||||
|                 default:  sRandomName = sTitle + " " + ms_RandomFirstName(oNPC) + " " + sPostfix; break; | ||||
|             } | ||||
|         } | ||||
|   | ||||
							
								
								
									
										186
									
								
								_module/nss/ra_hen_spw_rogue.nss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										186
									
								
								_module/nss/ra_hen_spw_rogue.nss
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,186 @@ | ||||
| //:://///////////////////////////////////////////// | ||||
| //:: Associate: On Spawn In | ||||
| //:: ra_hen_spw_rogue | ||||
| //:: Copyright (c) 2021 Project RATDOG | ||||
| //::////////////////////////////////////////////// | ||||
| /* | ||||
|  | ||||
|     OnSpawn for randomized rogue 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. | ||||
|     RndLightArmor(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", 10.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); | ||||
|     } | ||||
| } | ||||
| @@ -1,5 +1,5 @@ | ||||
| // | ||||
| // Bandit Random Armor Include | ||||
| // Randomized Armor Include | ||||
| // RA_RND_ARMOR_INC | ||||
| // | ||||
| // By: Jaysyn | ||||
| @@ -63,3 +63,67 @@ void RndBanditArmor(object oNPC) | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| void RndLightArmor(object oNPC) | ||||
| { | ||||
| // Makes sure any original armor isn't dropped as loot. | ||||
|     SetDroppableFlag(GetItemInSlot(INVENTORY_SLOT_CHEST, OBJECT_SELF), 0); | ||||
|  | ||||
|     //Randomizes Armor | ||||
|  | ||||
|     int nResult = d8(1); | ||||
|     int nStackSize = 1; // Create 1 items; | ||||
|  | ||||
|     object oArmor; | ||||
|  | ||||
|     string sItem; | ||||
|  | ||||
|     if (nResult == 1) | ||||
|         { | ||||
|             sItem = "aarcl002"; | ||||
|         } | ||||
|     else if(nResult == 2) | ||||
|         { | ||||
|             sItem = "baleas_cloth019"; | ||||
|         } | ||||
|     else if(nResult == 3) | ||||
|         { | ||||
|             sItem = "aarcl004"; | ||||
|         } | ||||
|     else if(nResult ==4) | ||||
|         { | ||||
|             sItem = "zep_studdedleath"; | ||||
|         } | ||||
|     else if(nResult == 5) | ||||
|         { | ||||
|             sItem = "aarcl004"; | ||||
|         } | ||||
|     else if(nResult == 6) | ||||
|         { | ||||
|             sItem = "nw_aarcl001"; | ||||
|         } | ||||
|     else if(nResult == 7) | ||||
|         { | ||||
|             sItem = "nw_aarcl002"; | ||||
|         } | ||||
|     else | ||||
|         sItem = "nw_aarcl009"; | ||||
|  | ||||
|     CreateItemOnObject(sItem, OBJECT_SELF, nStackSize); | ||||
|  | ||||
|         // Loop the object's inventory and equip the first | ||||
|     object oItem = GetFirstItemInInventory(OBJECT_SELF); | ||||
|     while(GetIsObjectValid(oItem)) | ||||
|     { | ||||
|         // Check if armor, of course | ||||
|         if(GetBaseItemType(oItem) == BASE_ITEM_ARMOR) | ||||
|         { | ||||
|             // Equip it and stop the script | ||||
|             DelayCommand(1.0f, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST)); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         oItem = GetNextItemInInventory(OBJECT_SELF); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user