diff --git a/nwn/nwnprc/trunk/include/prc_feat_const.nss b/nwn/nwnprc/trunk/include/prc_feat_const.nss index 7bc12779..63ad2eec 100644 --- a/nwn/nwnprc/trunk/include/prc_feat_const.nss +++ b/nwn/nwnprc/trunk/include/prc_feat_const.nss @@ -6336,6 +6336,13 @@ const int FEAT_HIDDEN_TALENT_THICKSKIN = 25944; const int FEAT_HIDDEN_TALENT_VIGOR = 25945; const int FEAT_HIDDEN_TALENT_GRIP_IRON = 25946; +//:: Player's Handbook II feats +const int FEAT_COMBAT_FOCUS = -9999; +const int FEAT_COMBAT_STABILITY = -9998; +const int FEAT_COMBAT_DEFENSE = -9997; +const int FEAT_COMBAT_VIGOR = -9996; +const int FEAT_COMBAT_AWARENESS = -9995; +const int FEAT_COMBAT_STRIKE = -9994; diff --git a/nwn/nwnprc/trunk/include/prc_inc_castlvl.nss b/nwn/nwnprc/trunk/include/prc_inc_castlvl.nss index 0c1a8beb..bd314112 100644 --- a/nwn/nwnprc/trunk/include/prc_inc_castlvl.nss +++ b/nwn/nwnprc/trunk/include/prc_inc_castlvl.nss @@ -797,6 +797,7 @@ int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID) if (nCastingClass == CLASS_TYPE_BARD || GetLevelByClass(CLASS_TYPE_BARD, oCaster)) { + //:: Includes RHD as bard. If they started with bard levels, then it //:: counts as a prestige class, otherwise RHD is used instead of bard levels. if(nRace == RACIAL_TYPE_GLOURA) @@ -904,8 +905,12 @@ int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID) if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_BARD, oCaster)) nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); - if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BARD, oCaster)) - nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + // if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BARD, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BARD, oCaster) + && !(GetRacialType(oCaster) == RACIAL_TYPE_GLOURA && !GetLevelByClass(CLASS_TYPE_BARD, oCaster))) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_BARD, oCaster)) nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); @@ -960,7 +965,8 @@ int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID) } //:: End Bard Arcane PrC casting calculations - if(nCastingClass == CLASS_TYPE_BARD || nCastingClass == CLASS_TYPE_BARD && nRace == RACIAL_TYPE_GLOURA && !GetLevelByClass(CLASS_TYPE_BARD, oCaster)) + //if(nCastingClass == CLASS_TYPE_BARD || nCastingClass == CLASS_TYPE_BARD && nRace == RACIAL_TYPE_GLOURA && !GetLevelByClass(CLASS_TYPE_BARD, oCaster)) + if((nCastingClass == CLASS_TYPE_FEY || nCastingClass == CLASS_TYPE_BARD) && nRace == RACIAL_TYPE_GLOURA && !GetLevelByClass(CLASS_TYPE_BARD, oCaster)) { if(DEBUG) DoDebug("prc_inc_castlvl >> Found Fey RHD caster (not bard)"); diff --git a/nwn/nwnprc/trunk/include/prc_inc_spells.nss b/nwn/nwnprc/trunk/include/prc_inc_spells.nss index 1c7ad712..398f61ae 100644 --- a/nwn/nwnprc/trunk/include/prc_inc_spells.nss +++ b/nwn/nwnprc/trunk/include/prc_inc_spells.nss @@ -417,7 +417,10 @@ int GetPrCAdjustedClassLevel(int nClass, object oCaster = OBJECT_SELF) // is it arcane, divine or neither? if(GetIsArcaneClass(nClass, oCaster) && nClass != CLASS_TYPE_SUBLIME_CHORD) { - if (GetPrimaryArcaneClass(oCaster) == nClass) // adjust for any PrCs + if(nClass == CLASS_TYPE_FEY && GetRacialType(oCaster) == RACIAL_TYPE_GLOURA) + iTemp = GetArcanePRCLevels(oCaster, nClass); + + else if (GetPrimaryArcaneClass(oCaster) == nClass) // adjust for any PrCs iTemp = GetArcanePRCLevels(oCaster, nClass); } else if(GetIsDivineClass(nClass, oCaster)) diff --git a/nwn/nwnprc/trunk/scripts/unarmed_caller.nss b/nwn/nwnprc/trunk/scripts/unarmed_caller.nss index 13be80eb..c9ba0da7 100644 --- a/nwn/nwnprc/trunk/scripts/unarmed_caller.nss +++ b/nwn/nwnprc/trunk/scripts/unarmed_caller.nss @@ -17,20 +17,23 @@ void main() { - DoDebug("unarmed_caller: FUNCTION STARTED"); - DoDebug("unarmed_caller: CALL_UNARMED_FEATS = " + IntToString(GetLocalInt(OBJECT_SELF, CALL_UNARMED_FEATS))); - DoDebug("unarmed_caller: CALL_UNARMED_FISTS = " + IntToString(GetLocalInt(OBJECT_SELF, CALL_UNARMED_FISTS))); + if (DEBUG) + { + DoDebug("unarmed_caller: FUNCTION STARTED"); + DoDebug("unarmed_caller: CALL_UNARMED_FEATS = " + IntToString(GetLocalInt(OBJECT_SELF, CALL_UNARMED_FEATS))); + DoDebug("unarmed_caller: CALL_UNARMED_FISTS = " + IntToString(GetLocalInt(OBJECT_SELF, CALL_UNARMED_FISTS))); + } int bCont = FALSE; if(GetLocalInt(OBJECT_SELF, CALL_UNARMED_FEATS)) { - DoDebug("unarmed_caller: CALLING UnarmedFeats"); + if (DEBUG) DoDebug("unarmed_caller: CALLING UnarmedFeats"); UnarmedFeats(OBJECT_SELF); bCont = TRUE; } if(GetLocalInt(OBJECT_SELF, CALL_UNARMED_FISTS)) { - DoDebug("unarmed_caller: CALLING UnarmedFists"); + if (DEBUG) DoDebug("unarmed_caller: CALLING UnarmedFists"); UnarmedFists(OBJECT_SELF); bCont = TRUE; }