Jump to content

Home

feats.2da and multiclassing? Help with unarmed combat feats.


Achilles

Recommended Posts

Wondering if anyone else has noticed this and found a resolution. When your PC multiclasses, he or she does not "reset" their unarmed combat feats. However I have noticed Handmaiden and Bao-Dur both start all over again

once they've multiclassed into Jedi/Dark Jedi.

 

 

Is this b/c of how they are granted the feats as Soldiers and Tech Specialist respectively? Would it make a difference if they were class feats rather than character feats?

 

I suppose a resolution could be found pretty easily, but I thought I would run this up the flag pole and see if anyone else had any input.

 

TIA.

Link to comment
Share on other sites

I have never noticed that before but I have heard a few other people mentioning that their npc's were loosing feats on level up.

If its guaranteed that they always loose those feats, Then you could add them back in by Editing a_makejedi.nss.

 

Do they gain those feats automatically at level upor are they chosen? If they do then you could write a few feat packages attached to the npc's multiclass with a class level condition that way if the npc is multiclassed at level 12 they would only get back the feats they would normally have.

 

If I have to I could post an example script, But I'm sure someone with more experience would be more helpfull. ;)

Link to comment
Share on other sites

Unarmed combat feats are granted, not selected, so a script might work. Unfortunately, what you are suggesting sounds like it is well beyond my abilities.

 

If it will help, here are the names of the unarmed combat feats and the levels they are granted:

 

UNARMED_SPECIALIST_I 2

UNARMED_SPECIALIST_II 6

UNARMED_SPECIALIST_III 10

UNARMED_SPECIALIST_IV 14

UNARMED_SPECIALIST_V 18

UNARMED_SPECIALIST_VI 22

UNARMED_SPECIALIST_VII 26

UNARMED_SPECIALIST_VIII 30

 

PS: I normally multiclass BD and HM at Level 15, so they would already have earned IV.

Link to comment
Share on other sites

Ok here is my noob attempt.

 // This global script is intended to be used for making each CNPC a Jedi.
/* Parameter Count: 1 (Which CNPC you intend to make a Jedi.)

NPC numbers, as specified in NPC.2da

0       Atton
1       BaoDur
2       Mand
3       g0t0
4       Handmaiden
5       hk47
6       Kreia
7       Mira
8       T3m4
9       VisasMarr
10      Hanharr
11      Disciple

*/
//// CFA 10-5-04

void main()
{
//t7 added
object oBao = GetObjectByTag("BaoDur",0);


   // Grab the Parameter.
   int nScriptNumber = GetScriptParameter( 1 );

   // If Param = 0, then it's Atton. (Trying to make it consistent with the CNPC integers.)
   if ( nScriptNumber == 0 ) {
       AddMultiClass (CLASS_TYPE_JEDISENTINEL, GetObjectByTag ("Atton") );
   }

   // If Param = 1, then it's Bao-Dur. (Trying to make it consistent with the CNPC integers.)
   if ( nScriptNumber == 1 ) {
       AddMultiClass (CLASS_TYPE_JEDIGUARDIAN, GetObjectByTag ("BaoDur") );
{
[b]//this checks for the npc's class as defined by[/b] classes.2da
int baolevel = GetLevelByClass(9, oBao);
[b]//this checks to see if the class level is greater thanor equal to 14[/b] 
if ( baolevel >= 14 )
[b]//these are the feats as defined by feats.2da[/b]
GrantFeat(212, oBao);
GrantFeat(213, oBao);
GrantFeat(214, oBao);
GrantFeat(215, oBao);
[color=skyblue]//the below feat is War veteran which I used to make sure the script was adding the feats [/color]
//GrantFeat(206, oBao); 
}
   }

   // If Param = 4, then it's the Handmaiden. (Trying to make it consistent with the CNPC integers.)
   if ( nScriptNumber == 4 ) {
       AddMultiClass (CLASS_TYPE_JEDIGUARDIAN, GetObjectByTag ("Handmaiden") );
   }

   // If Param = 7, then it's Mira. (Trying to make it consistent with the CNPC integers.)
   if ( nScriptNumber == 7 ) {
       AddMultiClass (CLASS_TYPE_JEDISENTINEL, GetObjectByTag ("Mira") );
   }

   // If Param = 11, then it's the Disciple. (Trying to make it consistent with the CNPC integers.)
   if ( nScriptNumber == 11 ) {
       AddMultiClass (CLASS_TYPE_JEDICONSULAR, GetObjectByTag ("Disciple") );
   }
} 

 

Now I know its not pretty and there is probably a more efficient way to write that , but it does seem to work for me.

 

btw: i checked to see if bao-dur lost those feats in my game before I used the script and he didn't loose any after he was multiclassed.

 

Also if you need to you can copy the code for bao-dur into Handmaidens but you will need to customize it for her.

Link to comment
Share on other sites

I know I could probably use nested ifs to check their current levels and then grant feats accordingly, however it seems that there probably has to be an easier way. I'd rather build the level check into the script rather than tie myself to multiclassing them by level 14 or risk missing the boat. Any suggestions?

Link to comment
Share on other sites

Here's an alternative approach to the problem. Don't know if it's better or worse than what's already been suggested.

 

Open the "k_oei_hench_inc.nss" script and add this function somewhere near the top of the script:

 

void ST_ForceCombatFeatProgression() {
   int nLevel = GetHitDice(OBJECT_SELF);
   int nLast  = GetLocalNumber(OBJECT_SELF, 2);

   if (nLevel == nLast)
       return;

   SetLocalNumber(OBJECT_SELF, 2, nLevel);

   int nFeat = 212;
   for (nLevel = 2; nLevel <= GetHitDice(OBJECT_SELF); nLevel += 4) {
       if ((nLevel > 30) || (nFeat > 219))
           break;

       if (!GetFeatAcquired(nFeat))
           GrantFeat(nFeat, OBJECT_SELF);

       nFeat++;    
   }
}

 

Then find the function called DoHandmaidenUserDef(). At the top inside this function, add:

 

   if ((sModuleName != "711KOR") && (pUserEvent == 1001)) {
       ST_ForceCombatFeatProgression();    
   }

 

Find the function DoBaoDurUserDef() and do the same.

 

Then, find the function DoBaoDurSpawnIn(), and at the top inside this function add:

AssignCommand(oPartyMember, GN_SetSpawnInCondition( SW_FLAG_EVENT_ON_HEARTBEAT ));

 

Save the modified include file and then re-compile the k_oei_userdef.nss script (which uses the include you just modified) and put it in the Override folder.

 

If I haven't overlooked something, they should be granted the feats if they don't already have them on (or just after) levelup.

 

(This is untested since I just wrote it, but in theory I think it should work. :) )

Link to comment
Share on other sites

Compiler didn't like it:

 

-------------------------------------------
NSSCOMP.bat output Tue 05/24/2005  05:05 
-------------------------------------------
Compiling: a_heal_pc.nss 
Total Execution time = 62 ms 
Compiling: a_pazaak_play.nss 
Total Execution time = 63 ms 
Compiling: givecell.nss 
Total Execution time = 47 ms 
Compiling: k_inc_debug.nss 
File is an include file, ignored 
Total Execution time = 47 ms 
Compiling: k_inc_force.nss 
File is an include file, ignored 
Total Execution time = 94 ms 
Compiling: k_inc_generic.nss 
File is an include file, ignored 
Total Execution time = 94 ms 
Compiling: k_inc_utility.nss 
File is an include file, ignored 
Total Execution time = 63 ms 
Compiling: k_oei_hench_inc.nss 
File is an include file, ignored 
Total Execution time = 125 ms 
Compiling: k_oei_userdef.nss 
k_inc_generic.nss(652): Error: Undeclared identifier GN_GetWeaponTypeFromBaseItem 
k_inc_generic.nss(1006): Error: Undeclared identifier GN_CheckSeriesRevitalize 
k_inc_generic.nss(1404): Error: Undeclared identifier SW_NUMBER_HEALERAI_PERCENTAGE 
k_inc_generic.nss(1404): Error: Required argument missing in call to SetLocalNumber 
k_inc_generic.nss(1414): Error: Undeclared identifier SW_NUMBER_HEALERAI_THRESHOLD 
k_inc_generic.nss(1414): Error: Required argument missing in call to SetLocalNumber 
k_inc_generic.nss(1444): Error: Undeclared identifier SW_NUMBER_HEALERAI_PERCENTAGE 
k_inc_generic.nss(1444): Error: Required argument missing in call to GetLocalNumber 
k_inc_generic.nss(1587): Error: Undeclared identifier SW_NUMBER_HEALERAI_THRESHOLD 
k_inc_generic.nss(1587): Error: Required argument missing in call to GetLocalNumber 
k_inc_generic.nss(2514): Error: Undeclared identifier GN_GetSeriesRevitalize 
k_inc_generic.nss(2855): Error: Undeclared identifier SW_NUMBER_COOLDOWN 
k_inc_generic.nss(2855): Error: Required argument missing in call to GetLocalNumber 
k_inc_generic.nss(2856): Error: Undeclared identifier SW_NUMBER_COOLDOWN_FIRE 
k_inc_generic.nss(2856): Error: Required argument missing in call to GetLocalNumber 
k_inc_generic.nss(2874): Error: Undeclared identifier SW_NUMBER_COOLDOWN 
k_inc_generic.nss(2874): Error: Required argument missing in call to SetLocalNumber 
k_inc_generic.nss(2879): Error: Undeclared identifier SW_NUMBER_COOLDOWN 
k_inc_generic.nss(2879): Error: Required argument missing in call to SetLocalNumber 
k_inc_generic.nss(3586): Error: Undeclared identifier SW_NUMBER_HEALERAI_THRESHOLD 
k_inc_generic.nss(3586): Error: Required argument missing in call to SetLocalNumber 
k_inc_generic.nss(3592): Error: Undeclared identifier SW_NUMBER_HEALERAI_PERCENTAGE 
k_inc_generic.nss(3592): Error: Required argument missing in call to SetLocalNumber 
k_inc_generic.nss(3773): Error: Undeclared identifier SW_NUMBER_HEALERAI_THRESHOLD 
k_inc_generic.nss(3773): Error: Required argument missing in call to GetLocalNumber 
k_inc_generic.nss(3778): Error: Undeclared identifier SW_NUMBER_HEALERAI_THRESHOLD 
k_inc_generic.nss(3778): Error: Required argument missing in call to SetLocalNumber 
k_inc_generic.nss(3786): Error: Undeclared identifier GN_GetWeaponTypeFromBaseItem 
k_inc_generic.nss(3797): Error: Undeclared identifier GN_GetWeaponTypeFromBaseItem 
k_inc_generic.nss(3822): Error: Undeclared identifier GN_GetWeaponTypeFromBaseItem 
k_inc_generic.nss(3834): Error: Undeclared identifier GN_GetWeaponTypeFromBaseItem 
k_inc_generic.nss(3932): Error: Undeclared identifier SW_NUMBER_HEALERAI_THRESHOLD 
k_inc_generic.nss(3932): Error: Required argument missing in call to GetLocalNumber 
k_inc_generic.nss(3975): Error: Undeclared identifier SW_NUMBER_HEALERAI_PERCENTAGE 
k_inc_generic.nss(3975): Error: Required argument missing in call to GetLocalNumber 
k_oei_hench_inc.nss(288): Error: Undeclared identifier SW_FLAG_WAYPOINT_START_AT_NEAREST 
k_oei_hench_inc.nss(288): Error: Required argument missing in call to GN_SetSpawnInCondition 
k_oei_hench_inc.nss(288): Error: Required argument missing in call to AssignCommand 
k_oei_hench_inc.nss(289): Error: Undeclared identifier SW_FLAG_WAYPOINT_PAUSE_RANDOM 
k_oei_hench_inc.nss(289): Error: Required argument missing in call to GN_SetSpawnInCondition 
k_oei_hench_inc.nss(289): Error: Required argument missing in call to AssignCommand 
k_oei_hench_inc.nss(290): Error: Undeclared identifier SW_FLAG_USE_WAYPOINT_ANIMATION 
k_oei_hench_inc.nss(290): Error: Required argument missing in call to GN_SetSpawnInCondition 
k_oei_hench_inc.nss(290): Error: Required argument missing in call to AssignCommand 
k_oei_hench_inc.nss(314): Error: Undeclared identifier SW_FLAG_WAYPOINT_START_AT_NEAREST 
k_oei_hench_inc.nss(314): Error: Required argument missing in call to GN_SetSpawnInCondition 
k_oei_hench_inc.nss(314): Error: Required argument missing in call to AssignCommand 
k_oei_hench_inc.nss(315): Error: Undeclared identifier SW_FLAG_WAYPOINT_PAUSE_LONG 
k_oei_hench_inc.nss(315): Error: Required argument missing in call to GN_SetSpawnInCondition 
k_oei_hench_inc.nss(315): Error: Required argument missing in call to AssignCommand 
k_oei_hench_inc.nss(316): Error: Undeclared identifier SW_FLAG_USE_WAYPOINT_ANIMATION 
k_oei_hench_inc.nss(316): Error: Required argument missing in call to GN_SetSpawnInCondition 
k_oei_hench_inc.nss(316): Error: Required argument missing in call to AssignCommand 
k_oei_hench_inc.nss(365): Error: Undeclared identifier SW_FLAG_WAYPOINT_START_AT_NEAREST 
k_oei_hench_inc.nss(365): Error: Required argument missing in call to GN_SetSpawnInCondition 
k_oei_hench_inc.nss(365): Error: Required argument missing in call to AssignCommand 
k_oei_hench_inc.nss(366): Error: Undeclared identifier SW_FLAG_WAYPOINT_PAUSE_SHORT 
k_oei_hench_inc.nss(366): Error: Required argument missing in call to GN_SetSpawnInCondition 
k_oei_hench_inc.nss(366): Error: Required argument missing in call to AssignCommand 
k_oei_hench_inc.nss(367): Error: Undeclared identifier SW_FLAG_USE_WAYPOINT_ANIMATION 
k_oei_hench_inc.nss(367): Error: Required argument missing in call to GN_SetSpawnInCondition 
k_oei_hench_inc.nss(367): Error: Required argument missing in call to AssignCommand 
k_oei_hench_inc.nss(454): Error: Undeclared identifier SW_FLAG_WAYPOINT_START_AT_NEAREST 
k_oei_hench_inc.nss(454): Error: Required argument missing in call to GN_SetSpawnInCondition 
k_oei_hench_inc.nss(454): Error: Required argument missing in call to AssignCommand 
k_oei_hench_inc.nss(455): Error: Undeclared identifier SW_FLAG_WAYPOINT_PAUSE_SHORT 
k_oei_hench_inc.nss(455): Error: Required argument missing in call to GN_SetSpawnInCondition 
k_oei_hench_inc.nss(455): Error: Required argument missing in call to AssignCommand 
k_oei_hench_inc.nss(456): Error: Undeclared identifier SW_FLAG_USE_WAYPOINT_ANIMATION 
k_oei_hench_inc.nss(456): Error: Required argument missing in call to GN_SetSpawnInCondition 
k_oei_hench_inc.nss(456): Error: Required argument missing in call to AssignCommand 
k_oei_hench_inc.nss(483): Error: Undeclared identifier SW_FLAG_WAYPOINT_START_AT_NEAREST 
k_oei_hench_inc.nss(483): Error: Required argument missing in call to GN_SetSpawnInCondition 
k_oei_hench_inc.nss(483): Error: Required argument missing in call to AssignCommand 
k_oei_hench_inc.nss(484): Error: Undeclared identifier SW_FLAG_WAYPOINT_PAUSE_RANDOM 
k_oei_hench_inc.nss(484): Error: Required argument missing in call to GN_SetSpawnInCondition 
k_oei_hench_inc.nss(484): Error: Required argument missing in call to AssignCommand 
k_oei_hench_inc.nss(485): Error: Undeclared identifier SW_FLAG_USE_WAYPOINT_ANIMATION 
k_oei_hench_inc.nss(485): Error: Required argument missing in call to GN_SetSpawnInCondition 
k_oei_hench_inc.nss(485): Error: Required argument missing in call to AssignCommand 
k_oei_hench_inc.nss(1363): Error: Undeclared identifier SW_NUMBER_HEALERAI_THRESHOLD 
k_oei_hench_inc.nss(1363): Error: Required argument missing in call to GetLocalNumber 
k_oei_hench_inc.nss(1413): Error: Undeclared identifier SW_NUMBER_HEALERAI_PERCENTAGE 
k_oei_hench_inc.nss(1413): Error: Required argument missing in call to GetLocalNumber 
k_oei_hench_inc.nss(1451): Error: Undeclared identifier SW_NUMBER_COOLDOWN 
k_oei_hench_inc.nss(1451): Error: Required argument missing in call to GetLocalNumber 
k_oei_hench_inc.nss(1458): Error: Undeclared identifier SW_NUMBER_COOLDOWN 
k_oei_hench_inc.nss(1458): Error: Required argument missing in call to SetLocalNumber 
k_oei_hench_inc.nss(1466): Error: Undeclared identifier SW_NUMBER_COOLDOWN 
k_oei_hench_inc.nss(1466): Error: Required argument missing in call to SetLocalNumber 
k_oei_hench_inc.nss(1471): Error: Undeclared identifier SW_NUMBER_COOLDOWN 
k_oei_hench_inc.nss(1471): Error: Required argument missing in call to SetLocalNumber 
Compilation aborted with errors 
Total Execution time = 234 ms 
Compiling: k_paz_mebla.nss 
Total Execution time = 62 ms 
Compiling: st_kreiaskills.nss 
Total Execution time = 47 ms 
-------------------------------------------
Compilation complete: 5/11 files compiled 
1 file had errors
5 file ignored as include file

I may have missed an inc file, but I double checked and I'm pretty sure I got them all.

Link to comment
Share on other sites

Originally posted by Achilles

Compiler didn't like it:

(snip)

I may have missed an inc file, but I double checked and I'm pretty sure I got them all.

 

You need:

 

k_inc_debug

k_inc_generic

k_inc_utility

k_inc_gensupport

k_inc_walkways

k_inc_drop

 

Judging by the error messages, my guess is that you are missing k_inc_gensupport and k_inc_walkways which contains many of those "missing identifiers".

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...