2026/01/12 Update
Gated DEBUG text in unarmed_caller.nss Added feat constants for the Combat Focus line of feats. Fixed & tested Fey + PrC spellcasting durations and the caster level returned for templates.
This commit is contained in:
@@ -6336,6 +6336,13 @@ const int FEAT_HIDDEN_TALENT_THICKSKIN = 25944;
|
|||||||
const int FEAT_HIDDEN_TALENT_VIGOR = 25945;
|
const int FEAT_HIDDEN_TALENT_VIGOR = 25945;
|
||||||
const int FEAT_HIDDEN_TALENT_GRIP_IRON = 25946;
|
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;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -797,6 +797,7 @@ int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
|
|
||||||
if (nCastingClass == CLASS_TYPE_BARD || GetLevelByClass(CLASS_TYPE_BARD, oCaster))
|
if (nCastingClass == CLASS_TYPE_BARD || GetLevelByClass(CLASS_TYPE_BARD, oCaster))
|
||||||
{
|
{
|
||||||
|
|
||||||
//:: Includes RHD as bard. If they started with bard levels, then it
|
//:: 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.
|
//:: counts as a prestige class, otherwise RHD is used instead of bard levels.
|
||||||
if(nRace == RACIAL_TYPE_GLOURA)
|
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))
|
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_BARD, oCaster))
|
||||||
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
|
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BARD, oCaster))
|
// if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BARD, oCaster))
|
||||||
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, 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))
|
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_BARD, oCaster))
|
||||||
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, 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
|
//:: 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)");
|
if(DEBUG) DoDebug("prc_inc_castlvl >> Found Fey RHD caster (not bard)");
|
||||||
|
|
||||||
|
|||||||
@@ -417,7 +417,10 @@ int GetPrCAdjustedClassLevel(int nClass, object oCaster = OBJECT_SELF)
|
|||||||
// is it arcane, divine or neither?
|
// is it arcane, divine or neither?
|
||||||
if(GetIsArcaneClass(nClass, oCaster) && nClass != CLASS_TYPE_SUBLIME_CHORD)
|
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);
|
iTemp = GetArcanePRCLevels(oCaster, nClass);
|
||||||
}
|
}
|
||||||
else if(GetIsDivineClass(nClass, oCaster))
|
else if(GetIsDivineClass(nClass, oCaster))
|
||||||
|
|||||||
@@ -17,20 +17,23 @@
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
DoDebug("unarmed_caller: FUNCTION STARTED");
|
if (DEBUG)
|
||||||
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)));
|
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;
|
int bCont = FALSE;
|
||||||
if(GetLocalInt(OBJECT_SELF, CALL_UNARMED_FEATS))
|
if(GetLocalInt(OBJECT_SELF, CALL_UNARMED_FEATS))
|
||||||
{
|
{
|
||||||
DoDebug("unarmed_caller: CALLING UnarmedFeats");
|
if (DEBUG) DoDebug("unarmed_caller: CALLING UnarmedFeats");
|
||||||
UnarmedFeats(OBJECT_SELF);
|
UnarmedFeats(OBJECT_SELF);
|
||||||
bCont = TRUE;
|
bCont = TRUE;
|
||||||
}
|
}
|
||||||
if(GetLocalInt(OBJECT_SELF, CALL_UNARMED_FISTS))
|
if(GetLocalInt(OBJECT_SELF, CALL_UNARMED_FISTS))
|
||||||
{
|
{
|
||||||
DoDebug("unarmed_caller: CALLING UnarmedFists");
|
if (DEBUG) DoDebug("unarmed_caller: CALLING UnarmedFists");
|
||||||
UnarmedFists(OBJECT_SELF);
|
UnarmedFists(OBJECT_SELF);
|
||||||
bCont = TRUE;
|
bCont = TRUE;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user