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:
Jaysyn904
2025-01-29 22:46:38 -05:00
parent 370b29e917
commit e641b42f84
209 changed files with 1893 additions and 926 deletions

View File

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