2026/02/19 Update

Eldritch Disciple should have Verminlord as an epic bonus feat.
Only spellcasters can use Craft (Alchemy).
Added Great Charisma and removed Great Wisdom as Force Missile Mage epic bonus feats.
Frenzied Berserker was missing Great STR 10 as an epic bonus feat.
Oozemaster had several epic bonus feats only grantable at 10th lvl.
Pyromancer's Great Charisma bonus feats were pointing at wrong or non-existent feats.
Corrected Frenzied Berserker's skill list.
Corrected Legendary Dreadnought's skill list.
Added placeholders for Combat Form feats.
Added Combat Forms masterfeats.
Fixed ASF issue with Eldritch Sculptor's 2nd blast.
Gated debug in CheckIfDeleveled().
Updated AddRacialRestrictions() for latest races.
Vow of Poverty & Forsaker work better together at level up.
Maybe fixed the mass ability buffs not hitting all targets issue.  Needs mulitplayer testing.
Updated some creature abilities to use PRC functions.
This commit is contained in:
Jaysyn904
2026-02-19 21:10:22 -05:00
parent e8e5f457b7
commit c1188ebb28
74 changed files with 3791 additions and 3606 deletions

View File

@@ -1621,3 +1621,6 @@ void DoCleanUp(int nMetamagic)
DeleteLocalInt(OBJECT_SELF, "NSB_SpellLevel");
DeleteLocalInt(OBJECT_SELF, "NSB_SpellbookID");
}
//:: Test Void
//:: void main (){}

View File

@@ -478,7 +478,8 @@ void UseInvocation(int nInvocation, int nClass, int nLevelOverride = 0, int bIns
ActionDoCommand(_SetInvocationVariables(oInvoker, nClass, StringToInt(lookup_spell_innate(nInvocation))));
// Cast the actual invocation
ActionCastSpell(nInvocation, nLevelOverride, 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, 0, 0, OBJECT_INVALID, bInstant);
//ActionCastSpell(nInvocation, nLevelOverride, 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, 0, 0, OBJECT_INVALID, bInstant);
ActionCastSpell(nInvocation, nLevelOverride, 0, 0, METAMAGIC_NONE, nClass, 0, 0, OBJECT_INVALID, bInstant);
// Initiate invocation-related variable CleanUp
ActionDoCommand(_CleanInvocationVariables(oInvoker));

View File

@@ -812,4 +812,4 @@ void DelayedSetVisualTransform(int nExpectedGeneration, object oTarget, int nTra
void DelaySetVisualTransform(float fDelay, object oTarget, string sGenerationName, int nTransform, float fValue);
//:: Test void
//::void main() {}
//::void main(){}

View File

@@ -3952,7 +3952,7 @@ const int FEAT_THREE_MOUNTAINS = 5286;
const int FEAT_MONKEY_GRIP = 5197;
const int FEAT_CRESCENT_MOON = 5194;
const int FEAT_QUICK_STAFF = 5190;
const int FEAT_RANGED_DISARM = 5192;
const int FEAT_RANGED_DISARM = 5192;
const int FEAT_BEAR_FANG = 5189;
const int FEAT_IMPROVED_RAPID_SHOT = 5188;
const int FEAT_EARTHS_EMBRACE = 5177;
@@ -4047,12 +4047,18 @@ const int FEAT_IMPROVED_SHIELD_BASH = 3250;
const int FEAT_INVESTIGATOR = 25998;
// Player's Handbook II Feats
const int FEAT_STEADFAST_DETERMINATION = 3267;
const int FEAT_CROSSBOW_SNIPER = 5311;
const int FEAT_SHIELD_SPECIALIZATION_LIGHT = 3251;
const int FEAT_SHIELD_SPECIALIZATION_HEAVY = 3252;
const int FEAT_SHIELD_WARD = 3253;
const int FEAT_AGILE_SHIELD_FIGHTER = 3254;
const int FEAT_STEADFAST_DETERMINATION = 3267;
const int FEAT_CROSSBOW_SNIPER = 5311;
const int FEAT_SHIELD_SPECIALIZATION_LIGHT = 3251;
const int FEAT_SHIELD_SPECIALIZATION_HEAVY = 3252;
const int FEAT_SHIELD_WARD = 3253;
const int FEAT_AGILE_SHIELD_FIGHTER = 3254;
const int FEAT_COMBAT_FOCUS = 26020;
const int FEAT_COMBAT_AWARENESS = 26021;
const int FEAT_COMBAT_DEFENSE = 26022;
const int FEAT_COMBAT_STABILITY = 26023;
const int FEAT_COMBAT_STRIKE = 26024;
const int FEAT_COMBAT_VIGOR = 26025;
// Weapons of Legacy Feats
const int FEAT_LEAST_LEGACY = 5300;
@@ -6367,14 +6373,6 @@ 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;
//:: Test void

View File

@@ -1022,8 +1022,6 @@ int PRCMySavingThrow(int nSavingThrow, object oTarget, int nDC, int nSaveType =
nDC -= 4;
else if(GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oTarget) > 3)
nDC -= 2;
}
else if(nSaveType == SAVING_THROW_TYPE_POISON)
{

View File

@@ -615,7 +615,7 @@ const string PRC_PSIONIC_SLAYER_REQUIRE_KILL_TOKEN = "PRC_PSIONIC_SLAYER_R
* Hybrid Form Shapchange.
*
* This switch allows the Werewolf class to be toggled to use the PRC Shifter
* Shapchange code instead.
* Shapechange code instead.
*
* Type: Int
* Values: 0 [Default] (Werewolf Hybrid Shapchange uses Bioware Polymorph)
@@ -1581,7 +1581,7 @@ const string PRC_PSI_ASTRAL_SEED_RESPAWN_DELAY_X1000 = "PRC_PSI_ASTRAL_SE
* If this flag is set, the XP loss is completely eliminated. The standard PRC event hook script
* of "prc_pw_astralseed" may be used to script any additional effects to occure upon Astral Seed
* respawning, including scripting specific XP loss amount.
* Type: Int
* Type: Int
* Values: 0 [Default] (Not set: lose 1 level worth of XP upon Astral Seed respawn)
* 1 (Any potitive value: Remove all XP loss from Astral Seed respawn)
*/

View File

@@ -8,7 +8,7 @@
*/
//:://////////////////////////////////////////////
//:: Created By: Rakiov
//:: Created On: 20.06.2005
//:: Created On: 20.08.2025
//:://////////////////////////////////////////////
#include "prc_nui_com_inc"

View File

@@ -576,6 +576,7 @@ const int SPELL_POISON_ITEM = 2883;
const int SPELL_POISON_FOOD = 2884;
const int SPELL_CLEAN_POISON_OFF = 2885;
// Psionic feat spells
const int SPELL_FEAT_SPEED_OF_THOUGHT_BONUS = 2820;

View File

@@ -713,8 +713,5 @@ void SetAugmentationOverride(object oCreature, struct user_augment_profile uap)
SetLocalInt(oCreature, PRC_AUGMENT_OVERRIDE, _EncodeProfile(uap) + 1);
}
// Test main
//void main(){}

View File

@@ -520,7 +520,7 @@ int GetMaxMysteryLevelLearnable(object oShadow, int nClass, int nType)
if(DEBUG) DoDebug("GetMaxMysteryLevelLearnable nType: " + IntToString(nType));
// Rules Quote:
// Within a category<EFBFBD>Apprentice, Initiate, Master<EFBFBD>you must have at least two mysteries of any given level
// Within a category -Apprentice, Initiate, Master- you must have at least two mysteries of any given level
// before you can take any mysteries of the next higher level. For instance, you must have two 1st-level
// mysteries before you can take any 2nds, and at least two 2nds before you can take any 3rds.
int nMaxLrn, i, nMystLevel, nCount1, nCount2;

View File

@@ -1629,11 +1629,7 @@ int CheckSecondaryPrC(object oPC = OBJECT_SELF)
if (GetHasFeat(FEAT_UNSEEN_SPELLCASTING_BEGUILER)) return TRUE;
if (GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BEGUILER)) return TRUE;
if (GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_BEGUILER)) return TRUE;
if (GetHasFeat(FEAT_WWOC_SPELLCASTING_BEGUILER)) return TRUE;
if (GetHasFeat(FEAT_WWOC_SPELLCASTING_BEGUILER)) return TRUE;
}
if (bDuskblade)
{
@@ -1680,9 +1676,7 @@ int CheckSecondaryPrC(object oPC = OBJECT_SELF)
if (GetHasFeat(FEAT_UNSEEN_SPELLCASTING_DUSKBLADE)) return TRUE;
if (GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_DUSKBLADE)) return TRUE;
if (GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_DUSKBLADE)) return TRUE;
if (GetHasFeat(FEAT_WWOC_SPELLCASTING_DUSKBLADE)) return TRUE;
if (GetHasFeat(FEAT_WWOC_SPELLCASTING_DUSKBLADE)) return TRUE;
}
if (bSorcerer)
{
@@ -3581,7 +3575,8 @@ int X2PreSpellCastCode2()
nContinue = Nondetection(oTarget, oCaster, nSchool, nCasterLevel);
//---------------------------------------------------------------------------
// Mystery Effects //---------------------------------------------------------------------------
// Mystery Effects
//---------------------------------------------------------------------------
if (nContinue)
nContinue = WarpSpell(oCaster, nSpellID);
@@ -3592,7 +3587,8 @@ int X2PreSpellCastCode2()
nContinue = FloodShadow(oCaster, nSpellID);
//---------------------------------------------------------------------------
// Incarnum Effects //---------------------------------------------------------------------------
// Incarnum Effects
//---------------------------------------------------------------------------
if (nContinue)
nContinue = MageShackles(oCaster, nSpellID);
@@ -3600,7 +3596,8 @@ int X2PreSpellCastCode2()
nContinue = Abrogation(oCaster, nCasterLevel, nSpellID);
//---------------------------------------------------------------------------
// Binding Effects //---------------------------------------------------------------------------
// Binding Effects
//---------------------------------------------------------------------------
if (nContinue)
nContinue = AmonInfluence(oTarget, oCaster, nSpellID, nSpellLevel, bSpellIsHostile);