Exalted update
Updated Vow of Poverty. Added Sanctify Ki Strike, Holy Strike, Fist of Heavens, Vow of Abstinence, Vow of Chastity & Gift of Faith. (@fenac). Turned off the Taunt & Parry skills. Re-disabled AC & save bonuses from Tumble & Spellcraft. Updated min() & max() to PRCmin() & PRCmax() to not conflict with similarly named NUI adjacent functions. Set Point Blank Shot to 30' per PnP. Added icon for Chosen of Evil. Started work on Hidden Talent. Created Psionics function cheatsheet. Updated release archive.
This commit is contained in:
@@ -1,209 +0,0 @@
|
||||
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;
|
||||
}
|
Reference in New Issue
Block a user