Spellcasting Level marker feat update

Spellcasting Level marker feat update.  Added new effect icons.  Removed some old NWNx messages.
This commit is contained in:
Jaysyn904
2023-07-23 20:57:37 -04:00
parent de1c0a6a7b
commit 04c7ed2867
193 changed files with 58659 additions and 39002 deletions
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
+857 -325
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.
+209
View File
@@ -0,0 +1,209 @@
int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
{
int nArcane;
int nOozeMLevel = GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
int nUM = GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
int nFirstClass = GetClassByPosition(1, oCaster);
int nSecondClass = GetClassByPosition(2, oCaster);
int nThirdClass = GetClassByPosition(3, oCaster);
int nFourthClass = GetClassByPosition(4, oCaster);
int nFifthClass = GetClassByPosition(5, oCaster);
int nSixthClass = GetClassByPosition(6, oCaster);
int nSeventhClass = GetClassByPosition(7, oCaster);
int nEighthClass = GetClassByPosition(8, oCaster);
if (GetFirstArcaneClassPosition(oCaster)) nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster)
+ GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster)
+ GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster)
+ GetLevelByClass(CLASS_TYPE_ARCANE_HIEROPHANT, oCaster)
+ GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster)
+ GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster)
+ GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster)
+ GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster)
+ GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster)
+ GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster)
+ GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster)
+ GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT,oCaster)
+ GetLevelByClass(CLASS_TYPE_FMM, oCaster)
+ GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster)
+ GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster)
+ GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster)
+ GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster)
+ GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster)
+ GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster)
+ GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster)
+ GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster)
+ GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster)
+ GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster)
+ GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster)
+ GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster)
+ GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster)
+ GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster)
+ GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster)
+ GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster)
+ (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
int nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);
if (nClass)
nArcane += nClass - 3 + d6();
//The following changes are to prevent a mage/invoker from gaining bonus caster levels in both base classes.
if(GetLocalInt(oCaster, "INV_Caster") == 1 ||
(!GetLevelByClass(CLASS_TYPE_WARLOCK, oCaster) && !GetLevelByClass(CLASS_TYPE_DRAGONFIRE_ADEPT, oCaster)))
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2
+ GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster)
+ GetLevelByClass(CLASS_TYPE_MAESTER, oCaster);
/* oozemaster levels count towards arcane caster level if:
*
* first class slot is arcane OR
* first class slot is NOT divine AND second class slot is arcane OR
* first AND second class slot is NOT divine AND 3rd class slot is arcane
*/
if (nOozeMLevel) //:: [PRC .35] This needs marker feats.
{
if (GetIsArcaneClass(nFirstClass, oCaster)
|| (!GetIsDivineClass(nFirstClass, oCaster)
&& GetIsArcaneClass(nSecondClass, oCaster))
|| (!GetIsDivineClass(nFirstClass, oCaster)
&& !GetIsDivineClass(nSecondClass, oCaster)
&& GetIsArcaneClass(nThirdClass, oCaster)))
nArcane += nOozeMLevel / 2;
}
if (nUM)
{
int nBoost = nUM - 1; //Prep caster always loses a level on first level of the class
if (nUM >= 4) nBoost = nUM - 2;
if (nUM >= 7) nBoost = nUM - 3;
nArcane += nBoost;
if (nCastingClass == CLASS_TYPE_SORCERER)
{
int nBoost = 1; //Sorcerer gets the lost levels back
if (nUM >= 4) nBoost = 2;
if (nUM >= 7) nBoost = 3;
nArcane += nBoost;
}
}
if(GetLevelByClass(CLASS_TYPE_SORCERER, oCaster))
{
int nRace = GetRacialType(oCaster);
//includes RHD HD as sorc
//if they have sorcerer levels, then it counts as a prestige class
//otherwise its used instead of sorc levels
if(nRace == RACIAL_TYPE_ARANEA)
nArcane += GetLevelByClass(CLASS_TYPE_SHAPECHANGER);
if(nRace == RACIAL_TYPE_RAKSHASA)
nArcane += GetLevelByClass(CLASS_TYPE_OUTSIDER);
if(nRace == RACIAL_TYPE_DRIDER)
nArcane += GetLevelByClass(CLASS_TYPE_ABERRATION);
if(nRace == RACIAL_TYPE_ARKAMOI)
nArcane += GetLevelByClass(CLASS_TYPE_MONSTROUS);
if(nRace == RACIAL_TYPE_REDSPAWN_ARCANISS)
nArcane += GetLevelByClass(CLASS_TYPE_MONSTROUS)*3/4;
if(nRace == RACIAL_TYPE_MARRUTACT)
nArcane += (GetLevelByClass(CLASS_TYPE_MONSTROUS)*6/7)-1;
}
if(GetLevelByClass(CLASS_TYPE_BARD, oCaster))
{
int nRace = GetRacialType(oCaster);
//includes RHD HD as bard
//if they have bard levels, then it counts as a prestige class
//otherwise its used instead of bard levels
if(nRace == RACIAL_TYPE_GLOURA)
nArcane += GetLevelByClass(CLASS_TYPE_FEY);
}
return nArcane;
}
int GetDivinePRCLevels(object oCaster)
{
int nDivine;
int nOozeMLevel = GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
int nFirstClass = GetClassByPosition(1, oCaster);
int nSecondClass = GetClassByPosition(2, oCaster);
int nThirdClass = GetClassByPosition(3, oCaster);
int nFourthClass = GetClassByPosition(4, oCaster);
int nFifthClass = GetClassByPosition(5, oCaster);
int nSixthClass = GetClassByPosition(6, oCaster);
int nSeventhClass = GetClassByPosition(7, oCaster);
int nEighthClass = GetClassByPosition(8, oCaster);
// This section accounts for full progression classes
nDivine += GetLevelByClass(CLASS_TYPE_ARCANE_HIEROPHANT, oCaster)
+ GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster)
+ GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster)
+ GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster)
+ GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster)
+ GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster)
+ GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster)
+ GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster)
+ GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster)
+ GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster)
+ GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster)
+ GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster)
+ GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster)
+ GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster)
+ GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster)
+ GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster)
+ GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster)
+ GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster)
+ GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster)
+ GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster)
+ GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster)
+ GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster)
+ (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
if (!GetHasFeat(FEAT_SF_CODE, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if (nOozeMLevel) //:: [PRC .35] This needs marker feats.
{
if (GetIsDivineClass(nFirstClass, oCaster)
|| (!GetIsArcaneClass(nFirstClass, oCaster)
&& GetIsDivineClass(nSecondClass, oCaster))
|| (!GetIsArcaneClass(nFirstClass, oCaster)
&& !GetIsArcaneClass(nSecondClass, oCaster)
&& GetIsDivineClass(nThirdClass, oCaster)))
nDivine += nOozeMLevel / 2;
}
return nDivine;
}