PRC8/Notes/removed_old_prc_funcs.nss
Jaysyn904 04c7ed2867 Spellcasting Level marker feat update
Spellcasting Level marker feat update.  Added new effect icons.  Removed some old NWNx messages.
2023-07-23 20:57:37 -04:00

210 lines
10 KiB
Plaintext

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;
}