PRC8/trunk/include/prc_inc_castlvl.nss
Jaysyn904 d3de7f3987 8 class slot support for arcane & divine casters
8 class slot support for arcane & divine casters.  Added Marker feat enforcement script.  Expanded LA buyoff to 60 HD.  Marker feat constant bug fixes.
2023-08-03 18:47:42 -04:00

7345 lines
319 KiB
Plaintext

/**
* @file
*
* This file contains PRCGetCasterLevel() and all its accessory functions.
* Functions that modify caster level go in this include. Keep out irrelevent
* functions. If this ends up like prc_inc_spells, you get slapped.
*/
//:: Updated for .35 by Jaysyn 2023/03/10
//////////////////////////////////////////////////
/* Function prototypes */
//////////////////////////////////////////////////
/**
* Returns the caster level when used in spells. You can use PRCGetCasterLevel()
* to determine a caster level from within a true spell script. In spell-like-
* abilities & items, it will only return GetCasterLevel.
*
* @param oCaster The creature casting the spell.
*
* @return The caster level the spell was cast at.
*/
int PRCGetCasterLevel(object oCaster = OBJECT_SELF);
/**
* A lookup for caster level progression for divine and arcane base classes
* @return an int that can be used in caster level calculations note: these use int division
*/
int GetCasterLevelModifier(int nClass);
/**
* To override for custom spellcasting classes. Looks for the
* local int "PRC_CASTERCLASS_OVERRIDE" on oCaster. If set,
* this is used as the casting class, else GetLastSpellCastClass()
* is used.
*
* @param oCaster The creature that last cast a spell
*
* @return The class used to cast the spell.
*/
int PRCGetLastSpellCastClass(object oCaster = OBJECT_SELF);
/**
* Returns if the given class is an arcane class.
*
* Arcane base classes are *hardcoded* into here, so new arcane
* base classes need adding to this function.
* Note: PrCs with their own spellbook eg. assassin count as base casters for this function
*
* @param oCaster The creature to check (outsiders can have sorc caster levels)
*
* @return TRUE if nClass is an arcane spellcasting class, FALSE otherwise
*/
int GetIsArcaneClass(int nClass, object oCaster = OBJECT_SELF);
/**
* Returns if the given class is an divine class.
*
* Divine base classes are *hardcoded* into here, so new divine
* base classes need adding to this function.
* Note: PrCs with their own spellbook eg. blackguard count as base casters for this function
*
* @param oCaster The creature to check (not currently used)
*
* @return TRUE if nClass is a divine spellcasting class, FALSE otherwise
*/
int GetIsDivineClass(int nClass, object oCaster = OBJECT_SELF);
// Returns the best "natural" arcane levels of the PC in question. Does not
// consider feats that situationally adjust caster level.
int GetLevelByTypeArcane(object oCaster = OBJECT_SELF);
// Returns the best "natural" divine levels of the PC in question. Does not
// consider feats that situationally adjust caster level.
int GetLevelByTypeDivine(object oCaster = OBJECT_SELF);
/**
* Works out the total arcane caster levels from arcane PrCs.
*
* Arcane prestige classes are *hardcoded* into this function, so new arcane caster
* classes need adding to it. Rakshasa RHD count as sorc PrC levels if they also have some levels in sorc
* note: PrCs with their own spellbook eg. assassin are not PrCs for this function
*
* @param oCaster The creature to check
* @param nCastingClass Casting class, only ever used for UM
*
* @return Number of arcane caster levels contributed by PrCs.
*/
int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID);
/**
* Works out the total divine caster levels from arcane PrCs.
*
* Divine prestige classes are *hardcoded* into this function, so new divine caster
* classes need adding to it.
* note: PrCs with their own spellbook eg. blackguard are not PrCs for this function
*
* @param oCaster The creature to check
*
* @return Number of divine caster levels contributed by PrCs.
*/
int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID);
/**
* Gets the position of the first arcane base class.
*
* @param oCaster The creature to check
*
* @return The position (1,2 or 3) of the first arcane *base* class of oCaster
*/
int GetFirstArcaneClassPosition(object oCaster = OBJECT_SELF);
/**
* Gets the position of the first divine base class.
*
* @param oCaster The creature to check
*
* @return The position (1,2 or 3) of the first divine *base* class of oCaster
*/
int GetFirstDivineClassPosition(object oCaster = OBJECT_SELF);
/**
* Gets the highest or first (by position) *base* arcane class type or,
* if oCaster has no arcane class levels, returns CLASS_TYPE_INVALID.
*
* This will get rakshasa RHD 'class' if oCaster doesn't have sorc levels.
*
* @param oCaster The creature to check
*
* @return CLASS_TYPE_* of first base arcane class or CLASS_TYPE_INVALID
*/
int GetPrimaryArcaneClass(object oCaster = OBJECT_SELF);
/**
* Gets the highest first (by position) *base* divine class type or,
* if oCaster has no divine class levels, returns CLASS_TYPE_INVALID.
*
* @param oCaster The creature to check
*
* @return CLASS_TYPE_* of first base divine class or CLASS_TYPE_INVALID
*/
int GetPrimaryDivineClass(object oCaster = OBJECT_SELF);
/**
* Gets the highest *base* arcane or divine class type or,
* if oCaster has no spellcasting class levels, returns CLASS_TYPE_INVALID.
*
* @param oCaster The creature to check
*
* @return CLASS_TYPE_* of first base arcane/divine class or CLASS_TYPE_INVALID
*/
int GetPrimarySpellcastingClass(object oCaster = OBJECT_SELF);
/**
* Gets the caster level adjustment from the Practiced Spellcaster feats.
*
* @param oCaster The creature to check
* @param iCastingClass The CLASS_TYPE* that the spell was cast by.
* @param iCastingLevels The caster level for the spell calculated so far
* ie. BEFORE Practiced Spellcaster.
*/
int PracticedSpellcasting(object oCaster, int iCastingClass, int iCastingLevels);
/**
* Returns the spell school of the spell passed to it.
*
* @param iSpellId The spell to get the school of.
*
* @return The SPELL_SCHOOL_* of the spell.
*/
int GetSpellSchool(int iSpellId);
/**
* Healing spell filter.
*
* Gets if the given spell is a healing spell based on a hardcoded list. New
* healing spells need to be added to this.
*
* @author GaiaWerewolf
* @date 18 July 2005
*
* @param nSpellId The spell to check
*
* @return TRUE if it is a healing spell, FALSE otherwise.
*/
int GetIsHealingSpell(int nSpellId);
/**
* Gets the contribution of the archmage's High Arcana Spell Power
* feat to caster level.
*
* @param oCaster The creature to check
*
* @return caster level modifier from archmage Spell Power feats.
*/
int ArchmageSpellPower(object oCaster);
/**
* Gets the caster level modifier from the Shadow Weave feat.
*
* Schools of Enchantment, Illusion, and Necromancy, and spells with the darkness
* descriptor altered by +1, Evocation or Transmutation (except spells with the
* darkness descriptor) altered by -1.
*
* @param oCaster The creature to check
* @param iSpellID The spell ID of the spell
* @param nSpellSchool The spell school the cast spell is from
* if none is specified, uses GetSpellSchool()
*
* @return caster level modifier for Shadow Weave feat.
*/
int ShadowWeave(object oCaster, int iSpellID, int nSpellSchool = -1);
/**
* Gets the caster level modifier from the Divination Power class feature.
*
* Divination spells +1/3 Unseen Seer levels, all others -1/3 Unseer Seer levels
*
* @param oCaster The creature to check
* @param iSpellID The spell ID of the spell
* @param nSpellSchool The spell school the cast spell is from
* if none is specified, uses GetSpellSchool()
*
* @return caster level modifier for Divination Power feat.
*/
int DivinationPower(object oCaster, int nSpellSchool);
/**
* Handles feats that modify caster level of spells with the fire
* descriptor.
*
* Currently this is Disciple of Meph's Fire Adept feat and Bloodline of Fire feat.
*
* @param oCaster The creature to check
* @param iSpellID The spell ID of the spell
*
* @return Caster level modifier for fire related feats.
*/
int FireAdept(object oCaster, int iSpellID);
/**
* Handles feats that modify caster level of spells with the air
* descriptor.
*
* Currently this is the Air Mephling's Type feat
*
* @param oCaster The creature to check
* @param iSpellID The spell ID of the spell
*
* @return Caster level modifier for fire related feats.
*/
int AirAdept(object oCaster, int iSpellID);
/**
* Handles feats that modify caster level of spells with the air
* descriptor.
*
* Currently this is the Air Mephling's Type feat
*
* @param oCaster The creature to check
* @param iSpellID The spell ID of the spell
*
* @return Caster level modifier for fire related feats.
*/
int WaterAdept(object oCaster, int iSpellID);
/**
* Handles feats that modify caster level of spells with the earth
* descriptor.
*
* Currently this is Drift Magic feat.
*
* @param oCaster The creature to check
* @param iSpellID The spell ID of the spell
*
* @return Caster level modifier for earth related feats.
*/
int DriftMagic(object oCaster, int iSpellID);
/**
* Soulcaster boost to caster level based on invested essentia
*
* @param oCaster The creature to check
* @param iSpellID The spell ID of the spell
*
* @return Caster level modifier
*/
int Soulcaster(object oCaster, int iSpellID);
/**
* Gets the caster level modifier from the Storm Magic feat.
*
* Get +1 caster level if raining or snowing in area
*
* @param oCaster The creature to check
*
* @return Caster level modifier for Storm Magic feat.
*/
int StormMagic(object oCaster);
/**
* Gets the caster level modifier from the Cormanthyran Moon Magic feat.
*
* Get +1 caster level if outdoors, at night, with no rain.
*
* @param oCaster The creature to check
*
* @return Caster level modifier for Cormanthyran Moon Magic feat.
*/
int CormanthyranMoonMagic(object oCaster);
/**
* Gets the caster level modifier from various domains.
*
* @param oCaster The creature to check
* @param nSpellID The spell ID of the spell
* @param nSpellSchool The spell school the cast spell is from
* if none is specified, uses GetSpellSchool()
*
* @return caster level modifier from domain powers
*/
int DomainPower(object oCaster, int nSpellID, int nSpellSchool = -1);
/**
* Gets the caster level modifier from the Therapeutic Mantle Meld.
*
* @param oCaster The creature to check
*
* @return caster level modifier
*/
int TherapeuticMantle(object oCaster, int nSpellID);
/**
* Gets the caster level modifier from the antipaladin's Death Knell SLA.
*
* @param oCaster The creature to check
*
* @return caster level modifier from the Death Knell SLA
*/
int DeathKnell(object oCaster);
/**
* Gets the caster level modifier from the Draconic Power feat.
*
* Feat gives +1 to caster level.
*
* @param oCaster The creature to check
*
* @return caster level modifier from the Draconic power feat.
*/
int DraconicPower(object oCaster = OBJECT_SELF);
/**
* Gets the caster level modifier from Song of Arcane Power effect.
*
* @param oCaster The creature to check
*
* @return caster level modifier from the Draconic power feat.
*/
int SongOfArcanePower(object oCaster = OBJECT_SELF);
/**
* Gets the caster level modifier to necromancy spells for the
* True Necromancer PrC (all spellcasting levels are counted, both
* arcane and divine).
*
* @param oCaster The creature to check
* @param iSpellID The spell ID of the spell
* @param sType "ARCANE" or "DIVINE" spell
* @param nSpellSchool The spell school the cast spell is from
* if none is specified, uses GetSpellSchool()
*
* @return caster level modifier for True Necro
*/
int TrueNecromancy(object oCaster, int iSpellID, string sType, int nSpellSchool = -1);
// Nentyar Hunter casting boost
int Nentyar(object oCaster, int nCastingClass);
// +1 on spells that target armor or shields
int ShieldDwarfWarder(object oCaster);
// +1 while this feat is active
int DarkSpeech(object oCaster);
// Adds 1/2 level in all other casting classes.
int UrPriestCL(object oCaster, int nCastingClass);
// Adds Druid levels to Blighter caster level
int BlighterCL(object oCaster, int nCastingClass);
//ebonfowl: Adds CL boosts from reserve feats
int ReserveFeatCL(object oCaster, int iSpellId);
//////////////////////////////////////////////////
/* Include section */
//////////////////////////////////////////////////
//#include "prc_racial_const"
// Not needed as it has acccess via prc_inc_newip
//#include "prc_inc_nwscript" // gets inc_2da_cache, inc_debug, prc_inc_switch
#include "prc_inc_newip"
//#include "prc_inc_spells"
#include "prc_inc_descrptr"
//////////////////////////////////////////////////
/* Internal functions */
//////////////////////////////////////////////////
// stolen from prcsp_archmaginc.nss, modified to work in FireAdept() function
string _GetChangedElementalType(int nSpellID, object oCaster = OBJECT_SELF)
{
string spellType = Get2DACache("spells", "ImmunityType", nSpellID);//lookup_spell_type(spell_id);
string sType = GetLocalString(oCaster, "archmage_mastery_elements_name");
if (sType == "") sType = spellType;
return sType;
}
//ebonfowl: Adding this function to check if a spell belongs to a given domain based on the Reserve Feat 2das
//Only works with Death, Destruction and War domains as only those domain 2das have been created
int GetIsFromDomain (int iSpellId, string sDomain)
{
string sFile = "prc_desc_" + sDomain;
int i;
int nListSpellID;
for (i = 0; i < 15; i++) // Adjust max i to reflect something close to the highest row number in the 2das
{
nListSpellID = StringToInt(Get2DACache(sFile, "SpellID", i));
if (nListSpellID == iSpellId) return TRUE;
}
return FALSE;
}
//////////////////////////////////////////////////
/* Function Definitions */
//////////////////////////////////////////////////
int GetCasterLevelModifier(int nClass)
{
switch(nClass) // do not change to return zero as this is used as a divisor
{
// add in new base half-caster classes here
case CLASS_TYPE_HEXBLADE:
case CLASS_TYPE_RANGER:
case CLASS_TYPE_PALADIN:
case CLASS_TYPE_ANTI_PALADIN:
return 2;
}
return 1; // normal progression
}
int PRCGetCasterLevel(object oCaster = OBJECT_SELF)
{
int nAdjust = GetLocalInt(oCaster, PRC_CASTERLEVEL_ADJUSTMENT);//this is for builder use
nAdjust += GetLocalInt(oCaster, "TrueCasterLens");
nAdjust += GetHasSpellEffect(SPELL_VIRTUOSO_MAGICAL_MELODY, oCaster);
// For when you want to assign the caster level.
int iReturnLevel = GetLocalInt(oCaster, PRC_CASTERLEVEL_OVERRIDE);
if (iReturnLevel)
{
if (DEBUG) DoDebug("PRCGetCasterLevel: found override caster level = "+IntToString(iReturnLevel)+" with adjustment = " + IntToString(nAdjust)+", original level = "+IntToString(GetCasterLevel(oCaster)));
return iReturnLevel+nAdjust;
}
// if we made it here, iReturnLevel = 0;
int iCastingClass = PRCGetLastSpellCastClass(oCaster); // might be CLASS_TYPE_INVALID
if(iCastingClass == CLASS_TYPE_SUBLIME_CHORD)
iCastingClass = GetPrimaryArcaneClass(oCaster);
int iSpellId = PRCGetSpellId(oCaster);
object oItem = PRCGetSpellCastItem(oCaster);
// Item Spells
// this check is unreliable because of Bioware's implementation (GetSpellCastItem returns
// the last object from which a spell was cast, even if we are not casting from an item)
if(GetIsObjectValid(oItem))
{
int nType = GetBaseItemType(oItem);
if(DEBUG) DoDebug("PRCGetCasterLevel: found valid item = "+GetName(oItem));
// double check, just to make sure
if(GetItemPossessor(oItem) == oCaster) // likely item casting
{
if(GetPRCSwitch(PRC_STAFF_CASTER_LEVEL)
&& ((nType == BASE_ITEM_MAGICSTAFF) ||
(nType == BASE_ITEM_CRAFTED_STAFF))
)
{
iCastingClass = GetPrimarySpellcastingClass(oCaster);
}
else
{
//code for getting new ip type
itemproperty ipTest = GetFirstItemProperty(oItem);
while(GetIsItemPropertyValid(ipTest))
{
if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_CAST_SPELL_CASTER_LEVEL)
{
int nSubType = GetItemPropertySubType(ipTest);
nSubType = StringToInt(Get2DACache("iprp_spells", "SpellIndex", nSubType));
if(nSubType == iSpellId)
{
iReturnLevel = GetItemPropertyCostTableValue(ipTest);
if (DEBUG) DoDebug("PRCGetCasterLevel: caster level from item = "+IntToString(iReturnLevel));
break; // exit the while loop
}
}
ipTest = GetNextItemProperty(oItem);
}
// if we didn't find a caster level on the item, it must be Bioware item casting
if(!iReturnLevel)
{
iReturnLevel = GetCasterLevel(oCaster);
if (DEBUG) DoDebug("PRCGetCasterLevel: bioware item casting with caster level = "+IntToString(iReturnLevel));
}
}
if(nType == BASE_ITEM_MAGICWAND || nType == BASE_ITEM_ENCHANTED_WAND)
{
if (DEBUG) DoDebug("PRCGetCasterLevel - Casting Item is a Wand at level "+IntToString(iReturnLevel));
if (GetHasFeat(FEAT_RECKLESS_WAND_WIELDER, oCaster) && GetLocalInt(oCaster, "RecklessWand")) // This burns an extra charge to increase caster level by 2
{
if (DEBUG) DoDebug("PRCGetCasterLevel - Reckless Wand Active");
if (GetItemCharges(oItem) > 0) // Make sure we have an extra charge to burn
{
iReturnLevel += 2;
if (!GetLocalInt(oCaster, "RecklessWandDelay")) SetItemCharges(oItem, GetItemCharges(oItem)-1);
SetLocalInt(oCaster, "RecklessWandDelay", TRUE);
DelayCommand(0.5, DeleteLocalInt(oCaster, "RecklessWandDelay"));
if (DEBUG) DoDebug("PRCGetCasterLevel - Reckless Wand Triggered at level "+IntToString(iReturnLevel));
}
}
if (GetHasFeat(FEAT_WAND_MASTERY, oCaster))
iReturnLevel += 2;
}
}
if (DEBUG) DoDebug("PRCGetCasterLevel: total item casting caster level = "+IntToString(iReturnLevel));
}
// get spell school here as many of the following fns use it
int nSpellSchool = GetSpellSchool(iSpellId);
// no item casting, and arcane caster?
if(!iReturnLevel && GetIsArcaneClass(iCastingClass, oCaster))
{
iReturnLevel = GetLevelByClass(iCastingClass, oCaster) / GetCasterLevelModifier(iCastingClass);
// Casting as a sorc but don't have any levels in the class
if(iCastingClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oCaster))
{
int nRace = GetRacialType(oCaster);
//if the player has sorcerer levels, then it counts as a prestige class
//otherwise use RHD instead of sorc levels
if(nRace == RACIAL_TYPE_RAKSHASA)
iReturnLevel = GetLevelByClass(CLASS_TYPE_OUTSIDER);
else if(nRace == RACIAL_TYPE_DRIDER)
iReturnLevel = GetLevelByClass(CLASS_TYPE_ABERRATION);
else if(nRace == RACIAL_TYPE_ARKAMOI)
iReturnLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS);
else if(nRace == RACIAL_TYPE_REDSPAWN_ARCANISS)
iReturnLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS)*3/4;
else if(nRace == RACIAL_TYPE_MARRUTACT)
iReturnLevel = (GetLevelByClass(CLASS_TYPE_MONSTROUS)*6/7)-1;
else if(nRace == RACIAL_TYPE_ARANEA)
iReturnLevel = GetLevelByClass(CLASS_TYPE_SHAPECHANGER);
}
// Casting as a bard but don't have any levels in the class
if(iCastingClass == CLASS_TYPE_BARD && !GetLevelByClass(CLASS_TYPE_BARD, oCaster))
{
int nRace = GetRacialType(oCaster);
//if the player has bard levels, then it counts as a prestige class
//otherwise use RHD instead of bard levels
if(nRace == RACIAL_TYPE_GLOURA)
iReturnLevel = GetLevelByClass(CLASS_TYPE_FEY);
}
//Spell Rage ability
if(GetHasSpellEffect(SPELL_SPELL_RAGE, oCaster)
&& (nSpellSchool == SPELL_SCHOOL_ABJURATION
|| nSpellSchool == SPELL_SCHOOL_CONJURATION
|| nSpellSchool == SPELL_SCHOOL_EVOCATION
|| nSpellSchool == SPELL_SCHOOL_NECROMANCY
|| nSpellSchool == SPELL_SCHOOL_TRANSMUTATION))
{
iReturnLevel = GetHitDice(oCaster);
}
else if(GetPrimaryArcaneClass(oCaster) == iCastingClass)
iReturnLevel += GetArcanePRCLevels(oCaster);
else if(GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster))
iReturnLevel += GetArcanePRCLevels(oCaster, iCastingClass);
iReturnLevel += PracticedSpellcasting(oCaster, iCastingClass, iReturnLevel);
iReturnLevel += TrueNecromancy(oCaster, iSpellId, "ARCANE", nSpellSchool)
+ ShadowWeave(oCaster, iSpellId, nSpellSchool)
+ FireAdept(oCaster, iSpellId)
+ AirAdept(oCaster, iSpellId)
+ WaterAdept(oCaster, iSpellId)
+ ArchmageSpellPower(oCaster)
+ StormMagic(oCaster)
+ CormanthyranMoonMagic(oCaster)
+ DomainPower(oCaster, iSpellId, nSpellSchool)
+ DivinationPower(oCaster, nSpellSchool)
+ DeathKnell(oCaster)
+ DraconicPower(oCaster)
+ DriftMagic(oCaster, iSpellId)
+ Soulcaster(oCaster, iSpellId)
+ TherapeuticMantle(oCaster, iSpellId)
+ DarkSpeech(oCaster)
+ ShieldDwarfWarder(oCaster)
+ SongOfArcanePower(oCaster)
+ ReserveFeatCL(oCaster, iSpellId);
if (GetLocalInt(oCaster, "CaptureMagic"))
{
iReturnLevel += GetLocalInt(oCaster, "CaptureMagic");
DeleteLocalInt(oCaster, "CaptureMagic");
}
// Get stance level bonus for Jade Phoenix Mage
if(GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster))
{
if (_GetChangedElementalType(iSpellId, oCaster) == "Fire" && GetLocalInt(oCaster, "ToB_JPM_FireB"))
iReturnLevel += 3;
iReturnLevel += GetLocalInt(oCaster, "ToB_JPM_MystP");
}
// Abjurant Champion uses its Base AB as Caster Level if higher
if(GetHasFeat(FEAT_MARTIAL_ARCANIST))
{
//Get the caster's base AB
int nBaseAB = GetBaseAttackBonus(oCaster);
if(nBaseAB > iReturnLevel)
{
iReturnLevel = nBaseAB;
}
}
if (DEBUG) DoDebug("PRCGetCasterLevel: total arcane caster level = "+IntToString(iReturnLevel));
}
// no item casting and divine caster?
else if(!iReturnLevel && GetIsDivineClass(iCastingClass, oCaster))
{
iReturnLevel = GetLevelByClass(iCastingClass, oCaster) / GetCasterLevelModifier(iCastingClass);
if(GetPrimaryDivineClass(oCaster) == iCastingClass)
iReturnLevel += GetDivinePRCLevels(oCaster, iCastingClass);
iReturnLevel += PracticedSpellcasting(oCaster, iCastingClass, iReturnLevel);
iReturnLevel += TrueNecromancy(oCaster, iSpellId, "DIVINE", nSpellSchool)
+ ShadowWeave(oCaster, iSpellId, nSpellSchool)
+ FireAdept(oCaster, iSpellId)
+ StormMagic(oCaster)
+ CormanthyranMoonMagic(oCaster)
+ Nentyar(oCaster, iCastingClass)
+ DomainPower(oCaster, iSpellId, nSpellSchool)
+ DriftMagic(oCaster, iSpellId)
+ AirAdept(oCaster, iSpellId)
+ WaterAdept(oCaster, iSpellId)
+ Soulcaster(oCaster, iSpellId)
+ ShieldDwarfWarder(oCaster)
+ DarkSpeech(oCaster)
+ DeathKnell(oCaster)
+ UrPriestCL(oCaster, iCastingClass)
+ BlighterCL(oCaster, iCastingClass)
+ ReserveFeatCL(oCaster, iSpellId);
if (DEBUG) DoDebug("PRCGetCasterLevel: total divine caster level = "+IntToString(iReturnLevel));
}
//at this point it must be a SLA or similar
if(!iReturnLevel)
{
iReturnLevel = GetCasterLevel(oCaster);
if (DEBUG) DoDebug("PRCGetCasterLevel: bioware caster level = "+IntToString(iReturnLevel));
}
iReturnLevel -= GetLocalInt(oCaster, "WoLCasterPenalty");
if (GetLocalInt(oCaster, "EldritchDisrupt"))
iReturnLevel -= 4;
if (GetLocalInt(oCaster, "EldritchVortex"))
iReturnLevel -= 4;
if (DEBUG) DoDebug("PRCGetCasterLevel: caster level pre adjust = "+IntToString(iReturnLevel));
iReturnLevel += nAdjust;
if (DEBUG) DoDebug("PRCGetCasterLevel: total caster level = "+IntToString(iReturnLevel));
return iReturnLevel;
}
int PRCGetLastSpellCastClass(object oCaster = OBJECT_SELF)
{
// note that a barbarian has a class type constant of zero. So nClass == 0 could in principle mean
// that a barbarian cast the spell, However, barbarians cannot cast spells, so it doesn't really matter
// beware of Barbarians with UMD, though. Also watch out for spell like abilities
// might have to provide a fix for these (for instance: if(nClass == -1) nClass = 0;
int nClass = GetLocalInt(oCaster, PRC_CASTERCLASS_OVERRIDE);
if(nClass)
{
if(DEBUG) DoDebug("PRCGetLastSpellCastClass: found override caster class = "+IntToString(nClass)+", original class = "+IntToString(GetLastSpellCastClass()));
return nClass;
}
nClass = GetLastSpellCastClass();
//if casting class is invalid and the spell was not cast form an item it was probably cast from the new spellbook
int NSB_Class = GetLocalInt(oCaster, "NSB_Class");
if(nClass == CLASS_TYPE_INVALID && GetSpellCastItem() == OBJECT_INVALID && NSB_Class)
nClass = NSB_Class;
if(DEBUG) DoDebug("PRCGetLastSpellCastClass: returning caster class = "+IntToString(nClass)+" NSB_Class = "+IntToString(NSB_Class));
return nClass;
}
int GetIsArcaneClass(int nClass, object oCaster = OBJECT_SELF)
{
return nClass == CLASS_TYPE_ASSASSIN
|| nClass == CLASS_TYPE_BARD
|| nClass == CLASS_TYPE_BEGUILER
|| nClass == CLASS_TYPE_CELEBRANT_SHARESS
|| nClass == CLASS_TYPE_CULTIST_SHATTERED_PEAK
|| nClass == CLASS_TYPE_DREAD_NECROMANCER
|| nClass == CLASS_TYPE_DUSKBLADE
|| nClass == CLASS_TYPE_HARPER
|| nClass == CLASS_TYPE_HEXBLADE
|| nClass == CLASS_TYPE_KNIGHT_WEAVE
|| nClass == CLASS_TYPE_SHADOWLORD
|| nClass == CLASS_TYPE_SORCERER
|| nClass == CLASS_TYPE_SUBLIME_CHORD
|| nClass == CLASS_TYPE_SUEL_ARCHANAMACH
|| nClass == CLASS_TYPE_WARMAGE
|| nClass == CLASS_TYPE_WIZARD
|| (nClass == CLASS_TYPE_SHAPECHANGER
&& GetRacialType(oCaster) == RACIAL_TYPE_ARANEA
&& !GetLevelByClass(CLASS_TYPE_SORCERER))
|| (nClass == CLASS_TYPE_OUTSIDER
&& GetRacialType(oCaster) == RACIAL_TYPE_RAKSHASA
&& !GetLevelByClass(CLASS_TYPE_SORCERER))
|| (nClass == CLASS_TYPE_ABERRATION
&& GetRacialType(oCaster) == RACIAL_TYPE_DRIDER
&& !GetLevelByClass(CLASS_TYPE_SORCERER))
|| (nClass == CLASS_TYPE_MONSTROUS
&& GetRacialType(oCaster) == RACIAL_TYPE_ARKAMOI
&& !GetLevelByClass(CLASS_TYPE_SORCERER))
|| (nClass == CLASS_TYPE_MONSTROUS
&& GetRacialType(oCaster) == RACIAL_TYPE_REDSPAWN_ARCANISS
&& !GetLevelByClass(CLASS_TYPE_SORCERER))
|| (nClass == CLASS_TYPE_MONSTROUS
&& GetRacialType(oCaster) == RACIAL_TYPE_MARRUTACT
&& !GetLevelByClass(CLASS_TYPE_SORCERER))
|| (nClass == CLASS_TYPE_FEY
&& GetRacialType(oCaster) == RACIAL_TYPE_GLOURA
&& !GetLevelByClass(CLASS_TYPE_BARD));
}
int GetIsDivineClass(int nClass, object oCaster = OBJECT_SELF)
{
return nClass == CLASS_TYPE_ARCHIVIST
|| nClass == CLASS_TYPE_BLACKGUARD
|| nClass == CLASS_TYPE_BLIGHTER
|| nClass == CLASS_TYPE_CLERIC
|| nClass == CLASS_TYPE_DRUID
|| nClass == CLASS_TYPE_FAVOURED_SOUL
|| nClass == CLASS_TYPE_HEALER
|| nClass == CLASS_TYPE_JUSTICEWW
|| nClass == CLASS_TYPE_KNIGHT_CHALICE
|| nClass == CLASS_TYPE_KNIGHT_MIDDLECIRCLE
|| nClass == CLASS_TYPE_NENTYAR_HUNTER
|| nClass == CLASS_TYPE_OCULAR
|| nClass == CLASS_TYPE_PALADIN
|| nClass == CLASS_TYPE_RANGER
|| nClass == CLASS_TYPE_SHAMAN
|| nClass == CLASS_TYPE_SLAYER_OF_DOMIEL
|| nClass == CLASS_TYPE_SOHEI
|| nClass == CLASS_TYPE_SOLDIER_OF_LIGHT
|| nClass == CLASS_TYPE_UR_PRIEST
|| nClass == CLASS_TYPE_VASSAL;
}
int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
{
int nArcane;
int nClass;
int nRace = GetRacialType(oCaster);
if (nCastingClass == CLASS_TYPE_BARD || GetLevelByClass(CLASS_TYPE_BARD, oCaster))
{
//:: Includes RHD as bard. If they started with bard levels, then it
//:: counts as a prestige class, otherwise RHD is used instead of bard levels.
if(nRace == RACIAL_TYPE_GLOURA)
nArcane += GetLevelByClass(CLASS_TYPE_FEY, oCaster);
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */
if(GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FOCHULAN_LYRIST, oCaster);
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */
/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster);
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster);
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_BARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_BARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_BARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_BARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_BARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_BARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_BARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_BARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_BARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_BARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_BARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_BARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_BARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_BARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_BARD, oCaster))
{
if (nClass)
{
nArcane += nClass - 3 + d6();
}
}
}
//:: End Bard Arcane PrC casting calculations
if(nCastingClass == CLASS_TYPE_BARD && nRace == RACIAL_TYPE_GLOURA && !GetLevelByClass(CLASS_TYPE_BARD, oCaster))
{
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */
if(GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FOCHULAN_LYRIST, oCaster);
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
/* if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); */
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */
/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster);
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_FEY, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster);
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_FEY, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_FEY, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_FEY, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_FEY, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_FEY, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_FEY, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_FEY, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_FEY, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_FEY, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_FEY, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_FEY, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_FEY, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_FEY, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_FEY, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_FEY, oCaster))
{
nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);
if (nClass) { nArcane += nClass - 3 + d6(); }
}
}
//:: End Fey Arcane PrC casting calculations
if (nCastingClass == CLASS_TYPE_ASSASSIN || GetLevelByClass(CLASS_TYPE_ASSASSIN, oCaster))
{
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_ASSASSIN, oCaster)) //:: Requires Assassin 4
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
/* if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); */
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster );
/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
/* if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); */
/* if(GetHasFeat(FEAT_JPM_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); */
/* if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); */
/* if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); */
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */
/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); */
/* if(GetHasFeat(FEAT_WWOC_SPELLCASTING_ASSASSIN, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); */
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_ASSASSIN, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_ASSASSIN, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_ASSASSIN, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_ASSASSIN, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_ASSASSIN, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_ASSASSIN, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_ASSASSIN, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; */
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_ASSASSIN, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_ASSASSIN, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_ASSASSIN, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_ASSASSIN, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_ASSASSIN, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_ASSASSIN, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_ASSASSIN, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_ASSASSIN, oCaster))
{
nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);
if (nClass)
nArcane += nClass - 3 + d6();
}
}
//:: End Assassin Arcane PrC casting calculations
if (nCastingClass == CLASS_TYPE_BEGUILER)
{
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster);
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FOCHULAN_LYRIST, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */
/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */
/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster);
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_BEGUILER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster);
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_BEGUILER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_BEGUILER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_BEGUILER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_BEGUILER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_BEGUILER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_BEGUILER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_BEGUILER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_BEGUILER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_BEGUILER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_BEGUILER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) /2;
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_BEGUILER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_BEGUILER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_BEGUILER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_BEGUILER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_BEGUILER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_BEGUILER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_BEGUILER, oCaster))
{ nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);
if (nClass) { nArcane += nClass - 3 + d6(); }
}
}
//:: End Beguiler Arcane PrC casting calculations
if (nCastingClass == CLASS_TYPE_CELEBRANT_SHARESS)
{
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
if(GetHasFeat(FEAT_BONDED_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster);
/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
/* if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); */
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
/* if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); */
/* if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); */
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */
/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster);
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); */
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BONDED_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; */
/* if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; */
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) /2;
/* if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
/* if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; */
/* if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; */
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */
/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_CELEBRANT_SHARESS, oCaster))
{
nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);
if (nClass) { nArcane += nClass - 3 + d6(); }
}
}
//:: End Celebrant of Sharess Arcane PrC casting calculations
if (nCastingClass == CLASS_TYPE_CULTIST_SHATTERED_PEAK)
{
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
/* if(GetHasFeat(FEAT_DHEART_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); */
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */
if(GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FOCHULAN_LYRIST, oCaster);
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
/* if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); */
/* if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); */
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */
/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */
/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster);
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); */
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) /2;
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */
/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_CULTIST_PEAK, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_CULTIST_PEAK, oCaster))
{
nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);
if (nClass) { nArcane += nClass - 3 + d6();}
}
}
//:: End Cultist of the Shattered Peaks Arcane PrC casting calculations
if (nCastingClass == CLASS_TYPE_DREAD_NECROMANCER)
{
/* if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION); */
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster);
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */
if(GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FOCHULAN_LYRIST, oCaster);
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */
if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster);
/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); */
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_DNECRO, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster);
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_DNECRO, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_DNECRO, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_DNECRO, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_DNECRO, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_DNECRO, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_DNECRO, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_DNECRO, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_DNECRO, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_DNECRO, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_DNECRO, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_DNECRO, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_DNECRO, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_DNECRO, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_DNECRO, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_DNECRO, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_DNECRO, oCaster))
{ nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);
if (nClass) { nArcane += nClass - 3 + d6(); }
}
}
//:: End Dread Necromancer Arcane PrC casting calculations
if (nCastingClass == CLASS_TYPE_DUSKBLADE)
{
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster);
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */
if(GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FOCHULAN_LYRIST, oCaster);
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */
/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster);
if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster);
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster);
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_DUSKBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_DUSKBLADE, oCaster))
{
nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);
if (nClass) { nArcane += nClass - 3 + d6();}
}
}
//:: End Duskblade Arcane PrC casting calculations
if (nCastingClass == CLASS_TYPE_HARPER)
{
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_HARPER, oCaster)) //:: enter after 5th Harper Scout lvl
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
/* if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); */
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_HARPER, oCaster)) //:: enter after 5th Harper Scout lvl
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */
if(GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FOCHULAN_LYRIST, oCaster);
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
/* if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); */
/* if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); */
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */
/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); */
/* if(GetHasFeat(FEAT_WWOC_SPELLCASTING_HARPER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); */
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_HARPER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_HARPER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_HARPER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_HARPER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) /2;
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_HARPER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_HARPER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_HARPER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_HARPER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
/* if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_HARPER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; */
/* if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_HARPER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; */
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_HARPER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_HARPER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_HARPER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_HARPER, oCaster))
{
nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);
if (nClass) { nArcane += nClass - 3 + d6();}
}
}
//:: End Harper Scout Arcane PrC casting calculations
if (nCastingClass == CLASS_TYPE_HEXBLADE)
{
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FOCHULAN_LYRIST, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
/* if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); */
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */
/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); */
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_HEXBLADE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster);
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_HEXBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_HEXBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_HEXBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BONDED_SPELLCASTING_HEXBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_HEXBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_HEXBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_HEXBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_HEXBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_HEXBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_HEXBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_HEXBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_HEXBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_HEXBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_HEXBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_HEXBLADE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_HEXBLADE, oCaster))
{
nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);
if (nClass) { nArcane += nClass - 3 + d6(); }
}
}
//:: End Hexblade Arcane PrC casting calculations
if (nCastingClass == CLASS_TYPE_KNIGHT_WEAVE)
{
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster);
/* if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); */
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
if(GetHasFeat(FEAT_FMM_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster);
if(GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FOCHULAN_LYRIST, oCaster);
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster);
/* if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); */
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */
/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); */
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster);
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) /2;
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
/* if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; */
/* if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; */
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2;
/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_KNIGHT_WEAVE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_KNIGHT_WEAVE, oCaster))
{ nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); }
if (nClass) { nArcane += nClass - 3 + d6(); }
}
//:: End Knight of the Weave Arcane PrC casting calculations
if (nCastingClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_SORCERER))
{
//:: Includes RHD as sorcerer. If they already have sorcerer levels, then it
//:: counts as a prestige class, otherwise RHD is 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(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster);
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster);
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
if(GetHasFeat(FEAT_FMM_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster);
if(GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FOCHULAN_LYRIST, oCaster);
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster);
/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster);
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster);
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_SORCERER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SORCERER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_SORCERER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BONDED_SPELLCASTING_SORCERER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_SORCERER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_SORCERER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_SORCERER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SORCERER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_SORCERER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_SORCERER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SORCERER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SORCERER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_SORCERER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_SORCERER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SORCERER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SORCERER, oCaster))
{ int nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); }
if (nClass) { nArcane += nClass - 3 + d6(); }
}
//:: End Sorcerer Arcane PrC casting calculations
if(nCastingClass == CLASS_TYPE_SORCERER && nRace == RACIAL_TYPE_DRIDER
|| nRace == RACIAL_TYPE_ARKAMOI
|| nRace == RACIAL_TYPE_MARRUTACT
|| nRace == RACIAL_TYPE_REDSPAWN_ARCANISS
|| nRace == RACIAL_TYPE_RAKSHASA
|| nRace == RACIAL_TYPE_ARANEA
&& !GetLevelByClass(CLASS_TYPE_SORCERER))
{
//:: Adding PrC caster levels to the racial caster level.
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_ALIENIST_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_ALIENIST_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_ALIENIST_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_ANIMA_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_ANIMA_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_ANIMA_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster);
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_MHARPER_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_MHARPER_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_MHARPER_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_CMANCER_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_CMANCER_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_CMANCER_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_DHEART_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_DHEART_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_DHEART_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_DSONG_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_DSONG_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_DSONG_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster);
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
if(GetHasFeat(FEAT_FMM_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_FMM_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_FMM_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_FMM_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster);
if(GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FOCHULAN_LYRIST, oCaster);
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_HARPERM_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_HARPERM_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_HARPERM_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_JPM_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_JPM_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_JPM_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_MONSTROUS, oCaster) //:: Shouldn't be possible
|| GetHasFeat(FEAT_MAESTER_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_MAESTER_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_MAESTER_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_ALCHEM_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_ALCHEM_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_TNECRO_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_TNECRO_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_TNECRO_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster);
/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_SORCERER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_UNSEEN_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_UNSEEN_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_UNSEEN_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster);
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_WWOC_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_WWOC_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_WWOC_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster);
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_MONSTROUS, oCaster) //:: Shouldn't be possible
|| GetHasFeat(FEAT_BSINGER_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_BSINGER_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_BSINGER_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BONDED_SPELLCASTING_MONSTROUS, oCaster) //:: Shouldn't be possible
|| GetHasFeat(FEAT_BONDED_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_BONDED_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_BONDED_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_MONSTROUS, oCaster) //:: Shouldn't be possible
|| GetHasFeat(FEAT_OLLAM_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_OLLAM_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_OLLAM_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_ORCUS_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_ORCUS_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_ORCUS_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_MONSTROUS, oCaster) //:: Shouldn't be possible
|| GetHasFeat(FEAT_HATHRAN_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_HATHRAN_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_HAVOC_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_HAVOC_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_HAVOC_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_SSWORD_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_SSWORD_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_SSWORD_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_GRAZZT_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_GRAZZT_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_TIAMAT_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_TIAMAT_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_WAYFARER_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_WAYFARER_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_WAYFARER_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_MONSTROUS, oCaster) //:: Shouldn't be possible
|| GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SHAPECHANGER, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_MONSTROUS, oCaster)
|| GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_ABERRATION, oCaster)
|| GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_OUTSIDER, oCaster)
|| GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SHAPECHANGER, oCaster))
{ nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); }
if (nClass) { nArcane += nClass - 3 + d6(); }
}
//:: End Aberration / Monstrous / Outsider / Shapechanger Arcane PrC casting calculations
if (nCastingClass == CLASS_TYPE_SUBLIME_CHORD)
{
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster);
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster);
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */
if(GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FOCHULAN_LYRIST, oCaster);
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster);
/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_SUBLIME_CHORD, oCaster)) // no cantrips!
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); */
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster);
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_SUBLIME_CHORD, oCaster)) //: No familiar!
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SUBLIME_CHORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SUBLIME_CHORD, oCaster))
{ nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); }
if (nClass) { nArcane += nClass - 3 + d6(); }
}
//:: End SUBLIME_CHORD Arcane PrC casting calculations
if (nCastingClass == CLASS_TYPE_SUEL_ARCHANAMACH)
{
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster);
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */
if(GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FOCHULAN_LYRIST, oCaster);
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */
/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */
/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); */
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster);
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) /2;
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SUEL_ARCHANAMACH, oCaster))
{ nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); }
if (nClass) { nArcane += nClass - 3 + d6(); }
}
//:: End Suel Archanamach Arcane PrC casting calculations
if (nCastingClass == CLASS_TYPE_SHADOWLORD)
{
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_SHADOWLORD, oCaster)) //:: Enter after 4th lvl
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster);
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */
if(GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FOCHULAN_LYRIST, oCaster);
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
/* if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); */
/* if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); */
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */
/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster);
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); */
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) /2;
/* if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SHADOWLORD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SHADOWLORD, oCaster))
{
nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);
if (nClass) { nArcane += nClass - 3 + d6();}
}
}
//:: End Telflammar Shadowlord Arcane PrC casting calculations
if (nCastingClass == CLASS_TYPE_WARMAGE)
{
/* if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); */
/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster);
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
if(GetHasFeat(FEAT_FMM_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster);
if(GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FOCHULAN_LYRIST, oCaster);
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */
/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster);
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster);
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_WARMAGE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_WARMAGE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_WARMAGE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BONDED_SPELLCASTING_WARMAGE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_WARMAGE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_WARMAGE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_WARMAGE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_WARMAGE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_WARMAGE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_WARMAGE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_WARMAGE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_WARMAGE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_WARMAGE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_WARMAGE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_WARMAGE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_WARMAGE, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_WARMAGE, oCaster))
{ nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); }
if (nClass) { nArcane += nClass - 3 + d6(); }
}
//:: End Warmage Arcane PrC casting calculations
if (nCastingClass == CLASS_TYPE_WIZARD)
{
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster);
if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster);
if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster);
if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
/* if(GetHasFeat(FEAT_DHEART_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); */
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster);
if(GetHasFeat(FEAT_FMM_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster);
if(GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FOCHULAN_LYRIST, oCaster);
if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster);
if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster);
if(GetHasFeat(FEAT_JPM_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster);
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_WARMAGE, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster);
if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster);
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */
/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */
if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster);
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_WIZARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster);
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_WIZARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_WIZARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_WIZARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BONDED_SPELLCASTING_WIZARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_WIZARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_WIZARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) /2;
/* if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_WIZARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) /2; */
if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_WIZARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_WIZARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_WIZARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_WIZARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2;
if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_WIZARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_WIZARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_WIZARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_WIZARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_WIZARD, oCaster))
nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_WIZARD, oCaster))
{ nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);}
if (nClass) { nArcane += nClass - 3 + d6(); }
}
//:: End Wizard Arcane PrC casting calculations
return nArcane;
}
int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
{
int nDivine = 0;
if (nCastingClass == CLASS_TYPE_ARCHIVIST)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_ARCHIVIST, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster);
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster);
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster);
if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster);
if(GetHasFeat(FEAT_FMM_SPELLCASTING_ARCHIVIST, oCaster)) //:: Not divine
nDivine += GetLevelByClass(CLASS_TYPE_FMM, oCaster);
if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster);
if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster);
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster);
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster);
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_KORD_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_ARCHIVIST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
}
//:: End Archivist Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_BLACKGUARD)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_BLACKGUARD, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster);
/* if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); */
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
/* if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster);
if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster);
if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster);
if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
/* if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); */
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
/* if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); */
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
/* if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); */
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster);
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; */
/* if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; */
/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2; */
/* if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; */
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; */
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_BLACKGUARD, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
}
//:: End Blackguard Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_BLIGHTER)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_BLIGHTER, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_BLIGHTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster);
/* if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); */
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_BLIGHTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
/* if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); */
/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster);
if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */
if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster);
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
/* if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); */
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_BLIGHTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
/* if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); */
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
/* if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); */
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster);
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_BLIGHTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster + 1) / 2
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster + 1) / 2
if(GetHasFeat(FEAT_KORD_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_OLLAM, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_BLIGHTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_BLIGHTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_BLIGHTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_BLIGHTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_BLIGHTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
}
//:: End Blighter Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_CLERIC)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_CLERIC, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_CLERIC, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster);
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster);
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_CLERIC, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster);
if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster);
if(GetHasFeat(FEAT_FMM_SPELLCASTING_CLERIC, oCaster) && GetHasFeat(FEAT_BONUS_DOMAIN_FORCE, oCaster) || GetHasFeat(FEAT_DOMAIN_POWER_FORCE, oCaster)) //:: Not divine
nDivine += GetLevelByClass(CLASS_TYPE_FMM, oCaster);
if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster);
if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster);
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_CLERIC, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster);
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster);
if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster);
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_CLERIC, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_CLERIC, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_CLERIC, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_CLERIC, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_CLERIC, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_KORD_SPELLCASTING_CLERIC, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_CLERIC, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_CLERIC, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_CLERIC, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_CLERIC, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_CLERIC, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_CLERIC, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_CLERIC, oCaster) && GetHasFeat(FEAT_BONUS_DOMAIN_TRAVEL, oCaster) || GetHasFeat(FEAT_TRAVEL_DOMAIN_POWER, oCaster)) //:: Not divine
nDivine += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_CLERIC, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
}
//:: End Cleric Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_DRUID)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_DRUID, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_DRUID, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); */
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster);
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_DRUID, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster);
/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster);
if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */
if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster);
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
/* if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); */
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_DRUID, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
/* if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster); */
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster);
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
/* if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); */
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster);
if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster);
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_DRUID, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_DRUID, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_DRUID, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_DRUID, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 */
/* if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_DRUID, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_DRUID, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_DRUID, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; */
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_DRUID, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_DRUID, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2; */
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_DRUID, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_DRUID, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
}
//:: End Druid Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_FAVOURED_SOUL)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_FAVOURED_SOUL, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster);
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster);
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster);
if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster);
if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster);
if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster);
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster);
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster);
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_KORD_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_FAVOURED_SOUL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
}
//:: End Favoured Soul Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_HEALER)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_HEALER, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); */
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster);
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster);
/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); */
if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster);
if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster);
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_HEALER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster);
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_HEALER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); */
/* if(GetHasFeat(FEAT_BFZ_SPELLCASTING_HEALER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2; */
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_HEALER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_HEALER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_HEALER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_KORD_SPELLCASTING_HEALER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_HEALER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_HEALER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2; */
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_HEALER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_HEALER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2; */
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_HEALER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_HEALER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */
}
//:: End Healer Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_JUSTICEWW)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_JUSTICEWW, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster);
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster);
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster);
/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); */
if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster);
/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster);
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster);
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_KORD_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_JUSTICEWW, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
}
//:: End Justice of Weald & Woe Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_KNIGHT_CHALICE)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_KNIGHT_CHALICE, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); */
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster);
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster);
if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster);
/* if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */
/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
/* if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; */
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster);
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ORCUS, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; ;
/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_KNIGHT_CHALICE, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */
}
//:: End Knight of the Chalice Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_KNIGHT_MIDDLECIRCLE)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); */
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster);
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster);
if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster);
if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster);
/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster);
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ORCUS, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */
}
//:: End Knight of the Middle Circle Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_NENTYAR_HUNTER)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_NENTYAR_HUNTER, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); */
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster);
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster);
if(GetHasFeat(FEAT_FMM_SPELLCASTING_NENTYAR_HUNTER, oCaster)) //:: Not divine
nDivine += GetLevelByClass(CLASS_TYPE_FMM, oCaster);
/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); */
/* if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */
/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster);
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); */
/* if(GetHasFeat(FEAT_BFZ_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_KORD_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ORCUS, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_NENTYAR_HUNTER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */
}
//:: End Nentyar Hunter Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_OCULAR)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_OCULAR, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_OCULAR, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster);
/* if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster);
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); */
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_OCULAR, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
/* if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster);
if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster);
if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */
if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster);
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
/* if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); */
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_OCULAR, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
/* if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); */
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
/* if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); */
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster);
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_OCULAR, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_OCULAR, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster + 1) / 2 */
/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 */
/* if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_OLLAM, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_OCULAR, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_OCULAR, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_OCULAR, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_OCULAR, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_OCULAR, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_OCULAR, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
}
//:: End Ocular Adept Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_PALADIN)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_PALADIN, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster);
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); */
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
/* if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); */
if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster);
/* if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */
/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_PALADIN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster);
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_PALADIN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_PALADIN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_PALADIN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_PALADIN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ORCUS, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_PALADIN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_PALADIN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_PALADIN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_PALADIN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */
}
//:: End Paladin Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_RANGER)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_RANGER, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_RANGER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster);
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster);
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_RANGER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster);
/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); */
if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster);
/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_RANGER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster);
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster);
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_RANGER, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_RANGER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_RANGER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_RANGER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_KORD_SPELLCASTING_RANGER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_RANGER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_RANGER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_RANGER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_RANGER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_RANGER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_RANGER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_RANGER, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
}
//:: End Ranger Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_SHAMAN)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_OASHAMAN, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_OASHAMAN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster);
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster);
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_OASHAMAN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster);
/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); */
if(GetHasFeat(FEAT_FMM_SPELLCASTING_OASHAMAN, oCaster) && GetHasFeat(FEAT_BONUS_DOMAIN_FORCE, oCaster) || GetHasFeat(FEAT_DOMAIN_POWER_FORCE, oCaster)) //:: Not divine
nDivine += GetLevelByClass(CLASS_TYPE_FMM, oCaster);
if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster);
if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster);
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_OASHAMAN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster);
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster);
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_OASHAMAN, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_OASHAMAN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_OASHAMAN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_OASHAMAN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_OASHAMAN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_KORD_SPELLCASTING_OASHAMAN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_OASHAMAN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_OASHAMAN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_OASHAMAN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_OASHAMAN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_OASHAMAN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_OASHAMAN, oCaster) && GetHasFeat(FEAT_BONUS_DOMAIN_TRAVEL, oCaster) || GetHasFeat(FEAT_TRAVEL_DOMAIN_POWER, oCaster)) //:: Not divine
nDivine += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_OASHAMAN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_OASHAMAN, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
}
//:: End Shaman Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_SLAYER_OF_DOMIEL)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_DOMIEL, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster);
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); */
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster);
if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster);
/* if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */
/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_DOMIEL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster);
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_DOMIEL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_DOMIEL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_DOMIEL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_DOMIEL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ORCUS, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_DOMIEL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_DOMIEL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_DOMIEL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_DOMIEL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */
}
//:: End Slayer of Domiel Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_SOHEI)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_SOHEI, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_SOHEI, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */
if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster);
/* if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); */
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SOHEI, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster);
if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster);
/* if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */
/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SOHEI, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
/* if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster); */
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster);
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
/* if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); */
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_SOHEI, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_SOHEI, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_SOHEI, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SOHEI, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_SOHEI, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_SOHEI, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_SOHEI, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SOHEI, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_SOHEI, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_SOHEI, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SOHEI, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
}
//:: End Sohei Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_SOLDIER_OF_LIGHT)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_SOL, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); */
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster);
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster);
/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); */
/* if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */
/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SOL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster);
/* if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); */
/* if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster);*/
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/*if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_SOL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_SOL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SOL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_OLLAM, oCaster + 1) / 2
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ORCUS, oCaster + 1) / 2
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster + 1) / 2
if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_SOL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SOL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */
}
//:: End Soldier of Light Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_UR_PRIEST)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_UR_PRIEST, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if(GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster);
/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster);
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); */
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster);
/* if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); */
/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster);
if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */
if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster);
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster);
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); */
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
/* if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); */
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
/* if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); */
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster + 1) / 2
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster + 1) / 2
if(GetHasFeat(FEAT_KORD_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_OLLAM, oCaster + 1) / 2
if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ORCUS, oCaster + 1) / 2
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster + 1) / 2
if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_UR_PRIEST, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
}
//:: End Ur-Priest Divine PrC casting calculations
if (nCastingClass == CLASS_TYPE_VASSAL)
{
if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_VASSAL, oCaster))
{
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster);
if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); */
if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster);
if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster);
if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster);
/* if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); */
if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster);
/* if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster);
if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_SOL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster);
/* if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); */
if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_VASSAL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster);
if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster);
if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster);
if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster);
if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster);
if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster);
/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_VASSAL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_DSONG_SPELLCASTING_VASSAL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2;
if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_VASSAL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_VASSAL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_ORCUS, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_VASSAL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_VASSAL, oCaster))
nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */
if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_VASSAL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2;
/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_VASSAL, oCaster))
nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */
}
//:: End Vassal of Bahamut Divine PrC casting calculations
return nDivine;
}
int GetFirstArcaneClassPosition(object oCaster = OBJECT_SELF)
{
int i;
for(i = 1; i < 9; i++)
{
if(GetIsArcaneClass(GetClassByPosition(i, oCaster), oCaster))
return i;
}
return 0;
}
int GetFirstDivineClassPosition(object oCaster = OBJECT_SELF)
{
int i;
for(i = 1; i < 9; i++)
{
if(GetIsDivineClass(GetClassByPosition(i, oCaster), oCaster))
return i;
}
return 0;
}
int GetPrimaryArcaneClass(object oCaster = OBJECT_SELF)
{
int nClass;
if(GetPRCSwitch(PRC_CASTERLEVEL_FIRST_CLASS_RULE))
{
int iArcanePos = GetFirstArcaneClassPosition(oCaster);
if (!iArcanePos) return CLASS_TYPE_INVALID; // no arcane casting class
nClass = GetClassByPosition(iArcanePos, oCaster);
}
else
{
int i, nClassTmp, nClassLvl;
for(i = 1; i < 9; i++)
{
nClassTmp = GetClassByPosition(i, oCaster);
if(GetIsArcaneClass(nClassTmp, oCaster) && nClassTmp != CLASS_TYPE_SUBLIME_CHORD)
{
if(GetLevelByClass(nClassTmp, oCaster) > nClassLvl)
{
nClass = nClassTmp;
nClassLvl = GetLevelByClass(nClass, oCaster);
}
}
}
if(!nClassLvl)
return CLASS_TYPE_INVALID;
}
//raks, Arkamoi, driders and dragons cast as sorcs
if(nClass == CLASS_TYPE_OUTSIDER
|| nClass == CLASS_TYPE_SHAPECHANGER
|| nClass == CLASS_TYPE_ABERRATION
|| nClass == CLASS_TYPE_DRAGON
|| nClass == CLASS_TYPE_MONSTROUS)
nClass = CLASS_TYPE_SORCERER;
if(nClass == CLASS_TYPE_FEY)
nClass = CLASS_TYPE_BARD;
return nClass;
}
int GetPrimaryDivineClass(object oCaster = OBJECT_SELF)
{
int nClass;
if(GetPRCSwitch(PRC_CASTERLEVEL_FIRST_CLASS_RULE))
{
int iDivinePos = GetFirstDivineClassPosition(oCaster);
if (!iDivinePos) return CLASS_TYPE_INVALID; // no Divine casting class
nClass = GetClassByPosition(iDivinePos, oCaster);
}
else
{
int i, nClassTmp, nClassLvl;
for(i = 1; i < 9; i++)
{
nClassTmp = GetClassByPosition(i, oCaster);
if(GetIsDivineClass(nClassTmp, oCaster))
{
if(GetLevelByClass(nClassTmp, oCaster) > nClassLvl)
{
nClass = nClassTmp;
nClassLvl = GetLevelByClass(nClass, oCaster);
}
}
}
if(!nClassLvl)
return CLASS_TYPE_INVALID;
}
return nClass;
}
int GetPrimarySpellcastingClass(object oCaster = OBJECT_SELF)
{
int bFirst = GetPRCSwitch(PRC_CASTERLEVEL_FIRST_CLASS_RULE);
int nClass;
int i, nClassTmp, nClassLvl;
for(i = 1; i < 9; i++)
{
nClassTmp = GetClassByPosition(i, oCaster);
if(GetIsArcaneClass(nClassTmp, oCaster)
|| GetIsDivineClass(nClassTmp, oCaster)
&& nClassTmp != CLASS_TYPE_SUBLIME_CHORD)
{
if(bFirst)
{
return nClass;
}
else if(GetLevelByClass(nClassTmp, oCaster) > nClassLvl)
{
nClass = nClassTmp;
nClassLvl = GetLevelByClass(nClass, oCaster);
}
}
}
if(!nClassLvl)
return CLASS_TYPE_INVALID;
return nClass;
}
int PracticedSpellcasting(object oCaster, int iCastingClass, int iCastingLevels)
{
int nFeat;
int iAdjustment = GetHitDice(oCaster) - iCastingLevels;
if (iAdjustment > 4) iAdjustment = 4;
if (iAdjustment < 0) iAdjustment = 0;
switch(iCastingClass)
{
case CLASS_TYPE_BARD: nFeat = FEAT_PRACTICED_SPELLCASTER_BARD; break;
case CLASS_TYPE_SORCERER: nFeat = FEAT_PRACTICED_SPELLCASTER_SORCERER; break;
case CLASS_TYPE_WIZARD: nFeat = FEAT_PRACTICED_SPELLCASTER_WIZARD; break;
case CLASS_TYPE_CLERIC: nFeat = FEAT_PRACTICED_SPELLCASTER_CLERIC; break;
case CLASS_TYPE_DRUID: nFeat = FEAT_PRACTICED_SPELLCASTER_DRUID; break;
case CLASS_TYPE_PALADIN: nFeat = FEAT_PRACTICED_SPELLCASTER_PALADIN; break;
case CLASS_TYPE_RANGER: nFeat = FEAT_PRACTICED_SPELLCASTER_RANGER; break;
case CLASS_TYPE_ASSASSIN: nFeat = FEAT_PRACTICED_SPELLCASTER_ASSASSIN; break;
case CLASS_TYPE_BLACKGUARD: nFeat = FEAT_PRACTICED_SPELLCASTER_BLACKGUARD; break;
case CLASS_TYPE_OCULAR: nFeat = FEAT_PRACTICED_SPELLCASTER_OCULAR; break;
case CLASS_TYPE_HEXBLADE: nFeat = FEAT_PRACTICED_SPELLCASTER_HEXBLADE; break;
case CLASS_TYPE_DUSKBLADE: nFeat = FEAT_PRACTICED_SPELLCASTER_DUSKBLADE; break;
case CLASS_TYPE_HEALER: nFeat = FEAT_PRACTICED_SPELLCASTER_HEALER; break;
case CLASS_TYPE_KNIGHT_CHALICE: nFeat = FEAT_PRACTICED_SPELLCASTER_KNIGHT_CHALICE; break;
case CLASS_TYPE_NENTYAR_HUNTER: nFeat = FEAT_PRACTICED_SPELLCASTER_NENTYAR; break;
case CLASS_TYPE_VASSAL: nFeat = FEAT_PRACTICED_SPELLCASTER_VASSAL; break;
case CLASS_TYPE_UR_PRIEST: nFeat = FEAT_PRACTICED_SPELLCASTER_UR_PRIEST; break;
case CLASS_TYPE_SOLDIER_OF_LIGHT: nFeat = FEAT_PRACTICED_SPELLCASTER_SOLDIER_OF_LIGHT; break;
case CLASS_TYPE_SHADOWLORD: nFeat = FEAT_PRACTICED_SPELLCASTER_SHADOWLORD; break;
case CLASS_TYPE_JUSTICEWW: nFeat = FEAT_PRACTICED_SPELLCASTER_JUSTICEWW; break;
case CLASS_TYPE_KNIGHT_MIDDLECIRCLE: nFeat = FEAT_PRACTICED_SPELLCASTER_KNIGHT_MIDDLECIRCLE; break;
case CLASS_TYPE_SHAMAN: nFeat = FEAT_PRACTICED_SPELLCASTER_SHAMAN; break;
case CLASS_TYPE_SLAYER_OF_DOMIEL: nFeat = FEAT_PRACTICED_SPELLCASTER_SLAYER_OF_DOMIEL; break;
case CLASS_TYPE_SUEL_ARCHANAMACH: nFeat = FEAT_PRACTICED_SPELLCASTER_SUEL_ARCHANAMACH; break;
case CLASS_TYPE_FAVOURED_SOUL: nFeat = FEAT_PRACTICED_SPELLCASTER_FAVOURED_SOUL; break;
case CLASS_TYPE_SOHEI: nFeat = FEAT_PRACTICED_SPELLCASTER_SOHEI; break;
case CLASS_TYPE_CELEBRANT_SHARESS: nFeat = FEAT_PRACTICED_SPELLCASTER_CELEBRANT_SHARESS; break;
case CLASS_TYPE_WARMAGE: nFeat = FEAT_PRACTICED_SPELLCASTER_WARMAGE; break;
case CLASS_TYPE_DREAD_NECROMANCER: nFeat = FEAT_PRACTICED_SPELLCASTER_DREAD_NECROMANCER; break;
case CLASS_TYPE_CULTIST_SHATTERED_PEAK: nFeat = FEAT_PRACTICED_SPELLCASTER_CULTIST; break;
case CLASS_TYPE_ARCHIVIST: nFeat = FEAT_PRACTICED_SPELLCASTER_ARCHIVIST; break;
case CLASS_TYPE_BEGUILER: nFeat = FEAT_PRACTICED_SPELLCASTER_BEGUILER; break;
case CLASS_TYPE_BLIGHTER: nFeat = FEAT_PRACTICED_SPELLCASTER_BLIGHTER; break;
case CLASS_TYPE_HARPER: nFeat = FEAT_PRACTICED_SPELLCASTER_HARPER; break;
default: return 0;
}
if(GetHasFeat(nFeat, oCaster))
return iAdjustment;
return 0;
}
int GetSpellSchool(int iSpellId)
{
string sSpellSchool = Get2DACache("spells", "School", iSpellId);//lookup_spell_school(iSpellId);
if (sSpellSchool == "A") return SPELL_SCHOOL_ABJURATION;
else if (sSpellSchool == "C") return SPELL_SCHOOL_CONJURATION;
else if (sSpellSchool == "D") return SPELL_SCHOOL_DIVINATION;
else if (sSpellSchool == "E") return SPELL_SCHOOL_ENCHANTMENT;
else if (sSpellSchool == "V") return SPELL_SCHOOL_EVOCATION;
else if (sSpellSchool == "I") return SPELL_SCHOOL_ILLUSION;
else if (sSpellSchool == "N") return SPELL_SCHOOL_NECROMANCY;
else if (sSpellSchool == "T") return SPELL_SCHOOL_TRANSMUTATION;
else return SPELL_SCHOOL_GENERAL;
return -1;
}
/*int GetIsHealingSpell(int nSpellId)
{
if ( nSpellId == SPELL_CURE_CRITICAL_WOUNDS
|| nSpellId == SPELL_CURE_LIGHT_WOUNDS
|| nSpellId == SPELL_CURE_MINOR_WOUNDS
|| nSpellId == SPELL_CURE_MODERATE_WOUNDS
|| nSpellId == SPELL_CURE_SERIOUS_WOUNDS
|| nSpellId == SPELL_GREATER_RESTORATION
|| nSpellId == SPELL_HEAL
|| nSpellId == SPELL_HEALING_CIRCLE
|| nSpellId == SPELL_MASS_HEAL
|| nSpellId == SPELL_MONSTROUS_REGENERATION
|| nSpellId == SPELL_REGENERATE
//End of stock NWN spells
|| nSpellId == SPELL_MASS_CURE_LIGHT
|| nSpellId == SPELL_MASS_CURE_MODERATE
|| nSpellId == SPELL_MASS_CURE_SERIOUS
|| nSpellId == SPELL_MASS_CURE_CRITICAL
|| nSpellId == SPELL_PANACEA
)
return TRUE;
return FALSE;
}*/
int ArchmageSpellPower(object oCaster)
{
if(GetHasFeat(FEAT_SPELL_POWER_V, oCaster))
return 5;
if(GetHasFeat(FEAT_SPELL_POWER_IV, oCaster))
return 4;
if(GetHasFeat(FEAT_SPELL_POWER_III, oCaster))
return 3;
if(GetHasFeat(FEAT_SPELL_POWER_II, oCaster))
return 2;
if(GetHasFeat(FEAT_SPELL_POWER_I, oCaster))
return 1;
return 0;
}
int ShadowWeave(object oCaster, int iSpellID, int nSpellSchool = -1)
{
if(!GetHasFeat(FEAT_SHADOWWEAVE,oCaster))
return 0;
if (nSpellSchool == -1)
nSpellSchool = GetSpellSchool(iSpellID);
// Bonus for spells of Enhancement, Necromancy and Illusion schools and spells with Darkness descriptor
if(nSpellSchool == SPELL_SCHOOL_ENCHANTMENT
|| nSpellSchool == SPELL_SCHOOL_NECROMANCY
|| nSpellSchool == SPELL_SCHOOL_ILLUSION
|| GetHasDescriptor(iSpellID, DESCRIPTOR_DARKNESS))
{
return 1;
}
// Penalty to spells of Evocation and Transmutation schools, except for those with Darkness descriptor
else if(nSpellSchool == SPELL_SCHOOL_EVOCATION
|| nSpellSchool == SPELL_SCHOOL_TRANSMUTATION)
{
return -1;
}
return 0;
}
int AirAdept(object oCaster, int iSpellID)
{
if(!GetHasDescriptor(iSpellID, DESCRIPTOR_AIR))
return 0;
int nBoost = 0;
if(GetHasFeat(FEAT_AIR_MEPHLING, oCaster))
nBoost += 1;
return nBoost;
}
int WaterAdept(object oCaster, int iSpellID)
{
if(!GetHasDescriptor(iSpellID, DESCRIPTOR_WATER))
return 0;
int nBoost = 0;
if(GetHasFeat(FEAT_WATER_MEPHLING, oCaster))
nBoost += 1;
return nBoost;
}
int FireAdept(object oCaster, int iSpellID)
{
if(!GetHasDescriptor(iSpellID, DESCRIPTOR_FIRE))
return 0;
int nBoost = 0;
if(GetHasFeat(FEAT_FIRE_ADEPT, oCaster))
nBoost += 1;
if(GetHasFeat(FEAT_FIRE_MEPHLING, oCaster))
nBoost += 1;
if(GetHasFeat(FEAT_BLOODLINE_OF_FIRE, oCaster))
nBoost += 2;
if(GetRacialType(oCaster) == RACIAL_TYPE_REDSPAWN_ARCANISS)
nBoost += 2;
return nBoost;
}
int DriftMagic(object oCaster, int iSpellID)
{
if(!GetHasDescriptor(iSpellID, DESCRIPTOR_EARTH))
return 0;
int nBoost = 0;
if(GetHasFeat(FEAT_DRIFT_MAGIC, oCaster))
nBoost += 1;
if(GetHasFeat(FEAT_EARTH_MEPHLING, oCaster))
nBoost += 1;
return nBoost;
}
/*int DriftMagic(object oCaster, int iSpellID)
{
if(GetHasDescriptor(iSpellID, DESCRIPTOR_EARTH) && GetHasFeat(FEAT_DRIFT_MAGIC, oCaster))
return 1;
else if(GetHasDescriptor(iSpellID, DESCRIPTOR_EARTH) && GetHasFeat(FEAT_EARTH_MEPHLING, oCaster))
return 1;
return 0;
}*/
int Soulcaster(object oCaster, int iSpellID)
{
if(GetLocalInt(oCaster, "SpellEssentia"+IntToString(iSpellID)))
{
int nReturn = GetLocalInt(oCaster, "SpellEssentia"+IntToString(iSpellID));
DelayCommand(1.0, DeleteLocalInt(oCaster, "SpellEssentia"+IntToString(iSpellID)));
return nReturn;
}
return 0;
}
int StormMagic(object oCaster)
{
if(!GetHasFeat(FEAT_STORMMAGIC, oCaster) && !GetHasFeat(FEAT_FROZEN_MAGIC, oCaster)) return 0;
int nBoost = 0;
int nWeather = GetWeather(GetArea(oCaster));
if(nWeather == WEATHER_RAIN && GetHasFeat(FEAT_STORMMAGIC, oCaster))
nBoost += 1;
if(nWeather == WEATHER_SNOW && GetHasFeat(FEAT_STORMMAGIC, oCaster))
nBoost += 1;
if(nWeather == WEATHER_SNOW && GetHasFeat(FEAT_FROZEN_MAGIC, oCaster))
nBoost += 2;
if (GetLocalInt(GetArea(oCaster),"FrozenMagic") && GetHasFeat(FEAT_FROZEN_MAGIC, oCaster) && nWeather != WEATHER_SNOW)
nBoost += 2;
return nBoost;
}
int DivinationPower(object oCaster, int nSpellSchool)
{
int nClass = GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
if(!nClass) return 0;
int nBoost = (nClass + 2) / 3;
if (nSpellSchool != SPELL_SCHOOL_DIVINATION)
nBoost *= -1; // Negative if it's not a divination spell
return nBoost;
}
int CormanthyranMoonMagic(object oCaster)
{
if (!GetHasFeat(FEAT_CORMANTHYRAN_MOON_MAGIC, oCaster)) return 0;
object oArea = GetArea(oCaster);
// The moon must be visible. Thus, outdoors, at night, with no rain.
if (GetWeather(oArea) != WEATHER_RAIN && GetWeather(oArea) != WEATHER_SNOW &&
GetIsNight() && !GetIsAreaInterior(oArea))
{
return 2;
}
return 0;
}
int Nentyar(object oCaster, int nCastingClass)
{
if (nCastingClass == CLASS_TYPE_NENTYAR_HUNTER)
{
int nBonus = GetLevelByClass(CLASS_TYPE_DRUID, oCaster) + GetLevelByClass(CLASS_TYPE_CLERIC, oCaster) + GetLevelByClass(CLASS_TYPE_RANGER, oCaster)/2;
return nBonus;
}
return 0;
}
int ShieldDwarfWarder(object oCaster)
{
if (!GetHasFeat(FEAT_SHIELD_DWARF_WARDER, oCaster)) return 0;
object oTarget = PRCGetSpellTargetObject();
// If it's an item that grants an AC bonus
int nBase = GetBaseItemType(oTarget);
if (nBase == BASE_ITEM_SMALLSHIELD || nBase == BASE_ITEM_LARGESHIELD || nBase == BASE_ITEM_TOWERSHIELD || nBase == BASE_ITEM_ARMOR)
return 1;
return 0;
}
int DarkSpeech(object oCaster)
{
if (GetHasSpellEffect(SPELL_DARK_SPEECH_POWER, oCaster))
{
ExecuteScript("prc_dark_power", oCaster);
return 1;
}
return 0;
}
int DomainPower(object oCaster, int nSpellID, int nSpellSchool = -1)
{
int nBonus = 0;
if (nSpellSchool == -1)
nSpellSchool = GetSpellSchool(nSpellID);
// Boosts Caster level with the Illusion school by 1
if (nSpellSchool == SPELL_SCHOOL_ILLUSION && GetHasFeat(FEAT_DOMAIN_POWER_GNOME, oCaster))
nBonus += 1;
// Boosts Caster level with the Illusion school by 1
if (nSpellSchool == SPELL_SCHOOL_ILLUSION && GetHasFeat(FEAT_DOMAIN_POWER_ILLUSION, oCaster))
nBonus += 1;
// Boosts Caster level with healing spells
if (GetIsOfSubschool(nSpellID, SUBSCHOOL_HEALING) && GetHasFeat(FEAT_HEALING_DOMAIN_POWER, oCaster))
nBonus += 1;
// Boosts Caster level with the Divination school by 1
if (nSpellSchool == SPELL_SCHOOL_DIVINATION && GetHasFeat(FEAT_KNOWLEDGE_DOMAIN_POWER, oCaster))
nBonus += 1;
// Boosts Caster level with evil spells by 1
if (GetHasDescriptor(nSpellID, DESCRIPTOR_EVIL) && GetHasFeat(FEAT_EVIL_DOMAIN_POWER, oCaster))
nBonus += 1;
// Boosts Caster level with good spells by 1
if (GetHasDescriptor(nSpellID, DESCRIPTOR_GOOD) && GetHasFeat(FEAT_GOOD_DOMAIN_POWER, oCaster))
nBonus += 1;
return nBonus;
}
int TherapeuticMantle(object oCaster, int nSpellID)
{
int nReturn;
// Boosts Caster level with healing spells
if (GetIsMeldBound(oCaster, MELD_THERAPEUTIC_MANTLE) == CHAKRA_SHOULDERS && GetIsOfSubschool(nSpellID, SUBSCHOOL_HEALING))
nReturn = GetEssentiaInvested(oCaster, MELD_THERAPEUTIC_MANTLE);
return nReturn;
}
int DeathKnell(object oCaster)
{
// If you do have the spell effect, return a +1 bonus to caster level
return GetHasSpellEffect(SPELL_DEATH_KNELL, oCaster);
}
int DraconicPower(object oCaster = OBJECT_SELF)
{
return GetHasFeat(FEAT_DRACONIC_POWER, oCaster);
}
int SongOfArcanePower(object oCaster = OBJECT_SELF)
{
int nBonus = GetLocalInt(oCaster, "SongOfArcanePower");
DeleteLocalInt(oCaster, "SongOfArcanePower");
int nLevel = GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
nBonus += (nLevel + 2)/3;
if(nBonus)
return nBonus;
return 0;
}
int TrueNecromancy(object oCaster, int iSpellID, string sType, int nSpellSchool = -1)
{
int iTNLevel = GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster);
if (!iTNLevel)
return 0;
if (nSpellSchool == -1)
nSpellSchool = GetSpellSchool(iSpellID);
if (nSpellSchool != SPELL_SCHOOL_NECROMANCY)
return 0;
if (sType == "ARCANE")
return GetLevelByTypeDivine(oCaster); // TN and arcane levels already added.
if (sType == "DIVINE")
return GetLevelByTypeArcane(oCaster);
return 0;
}
int UrPriestCL(object oCaster, int nCastingClass)
{
// Add 1/2 levels in all other casting classes except cleric
if (nCastingClass == CLASS_TYPE_UR_PRIEST)
{
int nTotal = 0;
int iFirstDivine = GetPrimaryDivineClass(oCaster);
int iBest = 0;
int iClass1 = GetClassByPosition(1, oCaster);
int iClass2 = GetClassByPosition(2, oCaster);
int iClass3 = GetClassByPosition(3, oCaster);
int iClass4 = GetClassByPosition(4, oCaster);
int iClass5 = GetClassByPosition(5, oCaster);
int iClass6 = GetClassByPosition(6, oCaster);
int iClass7 = GetClassByPosition(7, oCaster);
int iClass8 = GetClassByPosition(8, oCaster);
int iClass1Lev = GetLevelByPosition(1, oCaster);
int iClass2Lev = GetLevelByPosition(2, oCaster);
int iClass3Lev = GetLevelByPosition(3, oCaster);
int iClass4Lev = GetLevelByPosition(4, oCaster);
int iClass5Lev = GetLevelByPosition(5, oCaster);
int iClass6Lev = GetLevelByPosition(6, oCaster);
int iClass7Lev = GetLevelByPosition(7, oCaster);
int iClass8Lev = GetLevelByPosition(8, oCaster);
/*if (iClass1 == CLASS_TYPE_PALADIN || iClass1 == CLASS_TYPE_RANGER) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
if (iClass2 == CLASS_TYPE_PALADIN || iClass2 == CLASS_TYPE_RANGER) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
if (iClass3 == CLASS_TYPE_PALADIN || iClass3 == CLASS_TYPE_RANGER) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0;
if (iClass1 == iFirstDivine) iClass1Lev += GetDivinePRCLevels(oCaster);
if (iClass2 == iFirstDivine) iClass2Lev += GetDivinePRCLevels(oCaster);
if (iClass3 == iFirstDivine) iClass3Lev += GetDivinePRCLevels(oCaster);
iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev);
iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev);
iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev);
if (!GetIsDivineClass(iClass1, oCaster) || iClass1 == CLASS_TYPE_UR_PRIEST) iClass1Lev = 0;
if (!GetIsDivineClass(iClass2, oCaster) || iClass2 == CLASS_TYPE_UR_PRIEST) iClass2Lev = 0;
if (!GetIsDivineClass(iClass3, oCaster) || iClass3 == CLASS_TYPE_UR_PRIEST) iClass3Lev = 0;
nTotal += iClass1Lev + iClass2Lev + iClass3Lev;
if (DEBUG) DoDebug("UrPriestCL Divine - iClass1Lev "+IntToString(iClass1Lev)+" iClass2Lev "+IntToString(iClass2Lev)+" iClass3Lev "+IntToString(iClass3Lev));*/
int iFirstArcane = GetPrimaryArcaneClass(oCaster);
iClass1 = GetClassByPosition(1, oCaster);
iClass2 = GetClassByPosition(2, oCaster);
iClass3 = GetClassByPosition(3, oCaster);
iClass4 = GetClassByPosition(4, oCaster);
iClass5 = GetClassByPosition(5, oCaster);
iClass6 = GetClassByPosition(6, oCaster);
iClass7 = GetClassByPosition(7, oCaster);
iClass8 = GetClassByPosition(8, oCaster);
iClass1Lev = GetLevelByPosition(1, oCaster);
iClass2Lev = GetLevelByPosition(2, oCaster);
iClass3Lev = GetLevelByPosition(3, oCaster);
iClass4Lev = GetLevelByPosition(4, oCaster);
iClass5Lev = GetLevelByPosition(5, oCaster);
iClass6Lev = GetLevelByPosition(6, oCaster);
iClass7Lev = GetLevelByPosition(7, oCaster);
iClass8Lev = GetLevelByPosition(8, oCaster);
if (iClass1 == CLASS_TYPE_HEXBLADE) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
if (iClass2 == CLASS_TYPE_HEXBLADE) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
if (iClass3 == CLASS_TYPE_HEXBLADE) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0;
if (iClass4 == CLASS_TYPE_HEXBLADE) iClass4Lev = (iClass4Lev >= 4) ? (iClass4Lev / 2) : 0;
if (iClass5 == CLASS_TYPE_HEXBLADE) iClass5Lev = (iClass5Lev >= 4) ? (iClass5Lev / 2) : 0;
if (iClass6 == CLASS_TYPE_HEXBLADE) iClass6Lev = (iClass6Lev >= 4) ? (iClass6Lev / 2) : 0;
if (iClass7 == CLASS_TYPE_HEXBLADE) iClass7Lev = (iClass7Lev >= 4) ? (iClass7Lev / 2) : 0;
if (iClass8 == CLASS_TYPE_HEXBLADE) iClass8Lev = (iClass8Lev >= 4) ? (iClass8Lev / 2) : 0;
if (iClass1 == iFirstArcane) iClass1Lev += GetArcanePRCLevels(oCaster, iClass1);
if (iClass2 == iFirstArcane) iClass2Lev += GetArcanePRCLevels(oCaster, iClass2);
if (iClass3 == iFirstArcane) iClass3Lev += GetArcanePRCLevels(oCaster, iClass3);
if (iClass4 == iFirstArcane) iClass4Lev += GetArcanePRCLevels(oCaster, iClass4);
if (iClass5 == iFirstArcane) iClass5Lev += GetArcanePRCLevels(oCaster, iClass5);
if (iClass6 == iFirstArcane) iClass6Lev += GetArcanePRCLevels(oCaster, iClass6);
if (iClass7 == iFirstArcane) iClass7Lev += GetArcanePRCLevels(oCaster, iClass7);
if (iClass8 == iFirstArcane) iClass8Lev += GetArcanePRCLevels(oCaster, iClass8);
iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev);
iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev);
iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev);
iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass4Lev);
iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass5Lev);
iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass5Lev);
iClass7Lev += PracticedSpellcasting(oCaster, iClass7, iClass6Lev);
iClass8Lev += PracticedSpellcasting(oCaster, iClass8, iClass7Lev);
if (!GetIsArcaneClass(iClass1, oCaster)) iClass1Lev = 0;
if (!GetIsArcaneClass(iClass2, oCaster)) iClass2Lev = 0;
if (!GetIsArcaneClass(iClass3, oCaster)) iClass3Lev = 0;
if (!GetIsArcaneClass(iClass4, oCaster)) iClass4Lev = 0;
if (!GetIsArcaneClass(iClass5, oCaster)) iClass5Lev = 0;
if (!GetIsArcaneClass(iClass6, oCaster)) iClass6Lev = 0;
if (!GetIsArcaneClass(iClass7, oCaster)) iClass7Lev = 0;
if (!GetIsArcaneClass(iClass8, oCaster)) iClass8Lev = 0;
nTotal += iClass1Lev + iClass2Lev + iClass3Lev + iClass4Lev + iClass5Lev + iClass6Lev + iClass7Lev + iClass8Lev;
if (DEBUG) DoDebug("UrPriestCL Arcane - iClass1Lev "+IntToString(iClass1Lev)+" iClass2Lev "
+IntToString(iClass2Lev)+" iClass3Lev "
+IntToString(iClass3Lev)+" iClass4Lev "
+IntToString(iClass4Lev)+" iClass5Lev "
+IntToString(iClass5Lev)+" iClass6Lev "
+IntToString(iClass6Lev)+" iClass7Lev "
+IntToString(iClass7Lev)+" iClass8Lev "
+IntToString(iClass8Lev));
if (DEBUG) DoDebug("UrPriestCL Total - nTotal "+IntToString(nTotal));
return nTotal/2;
}
return 0;
}
int BlighterCL(object oCaster, int nCastingClass)
{
if (nCastingClass == CLASS_TYPE_BLIGHTER)
{
int nBonus = GetLevelByClass(CLASS_TYPE_DRUID, oCaster);
return nBonus;
}
return 0;
}
int ReserveFeatCL(object oCaster, int iSpellId)
{
int nSpellSchool = GetSpellSchool(iSpellId);
int nCLBonus = 0;
if (GetLocalInt(oCaster, "ReserveFeatsRunning") == TRUE)
{
if (GetHasDescriptor(iSpellId, DESCRIPTOR_ACID) && GetHasFeat(FEAT_ACIDIC_SPLATTER, oCaster)) nCLBonus += 1;
if (GetHasDescriptor(iSpellId, DESCRIPTOR_FIRE) && GetHasFeat(FEAT_FIERY_BURST, oCaster)) nCLBonus += 1;
if (GetHasDescriptor(iSpellId, DESCRIPTOR_COLD) && GetHasFeat(FEAT_WINTERS_BLAST, oCaster)) nCLBonus += 1;
if (GetHasDescriptor(iSpellId, DESCRIPTOR_ELECTRICITY) && GetHasFeat(FEAT_STORM_BOLT, oCaster)) nCLBonus += 1;
if (GetHasDescriptor(iSpellId, DESCRIPTOR_SONIC) && GetHasFeat(FEAT_CLAP_OF_THUNDER, oCaster)) nCLBonus += 1;
if (GetIsOfSubschool(iSpellId, SUBSCHOOL_HEALING) && GetHasFeat(FEAT_TOUCH_OF_HEALING, oCaster)) nCLBonus += 1;
if (GetIsOfSubschool(iSpellId, SUBSCHOOL_TELEPORTATION) && GetHasFeat(FEAT_DIMENSIONAL_JAUNT, oCaster)) nCLBonus += 1;
if (nSpellSchool == SPELL_SCHOOL_ABJURATION && GetHasFeat(FEAT_MYSTIC_BACKLASH, oCaster)) nCLBonus += 1;
if (nSpellSchool == SPELL_SCHOOL_NECROMANCY && GetHasFeat(FEAT_SICKENING_GRASP, oCaster)) nCLBonus += 1;
if (GetIsFromDomain(iSpellId, "wardom") && GetHasFeat(FEAT_HOLY_WARRIOR, oCaster)) nCLBonus += 1;
if (GetHasDescriptor(iSpellId, DESCRIPTOR_EARTH) && GetHasFeat(FEAT_CLUTCH_OF_EARTH, oCaster)) nCLBonus += 1;
if (GetHasDescriptor(iSpellId, DESCRIPTOR_AIR) && GetHasFeat(FEAT_BORNE_ALOFT, oCaster)) nCLBonus += 1;
if ((nSpellSchool == SPELL_SCHOOL_ABJURATION) && GetHasFeat(FEAT_PROTECTIVE_WARD, oCaster)) nCLBonus += 1;
if (GetHasDescriptor(iSpellId, DESCRIPTOR_DARKNESS) && GetHasFeat(FEAT_SHADOW_VEIL, oCaster)) nCLBonus += 1;
if (GetHasDescriptor(iSpellId, DESCRIPTOR_LIGHT) && GetHasFeat(FEAT_SUNLIGHT_EYES, oCaster)) nCLBonus += 1;
if ((nSpellSchool == SPELL_SCHOOL_ENCHANTMENT) && GetHasFeat(FEAT_TOUCH_OF_DISTRACTION, oCaster)) nCLBonus += 1;
if (GetIsFromDomain(iSpellId, "dethdom") && GetHasFeat(FEAT_CHARNEL_MIASMA, oCaster)) nCLBonus += 1;
if (GetHasDescriptor(iSpellId, DESCRIPTOR_WATER) && GetHasFeat(FEAT_DROWNING_GLANCE, oCaster)) nCLBonus += 1;
if (GetHasDescriptor(iSpellId, DESCRIPTOR_FORCE) && GetHasFeat(FEAT_INVISIBLE_NEEDLE, oCaster)) nCLBonus += 1;
if (GetIsOfSubschool(iSpellId, SUBSCHOOL_SUMMONING) && GetHasFeat(FEAT_SUMMON_ELEMENTAL, oCaster)) nCLBonus += 1;
if (GetIsOfSubschool(iSpellId, SUBSCHOOL_SUMMONING) && GetHasFeat(FEAT_DIMENSIONAL_REACH, oCaster)) nCLBonus += 1;
if (GetHasDescriptor(iSpellId, DESCRIPTOR_AIR) && GetHasFeat(FEAT_HURRICANE_BREATH, oCaster)) nCLBonus += 1;
if (GetIsOfSubschool(iSpellId, SUBSCHOOL_POLYMORPH) && GetHasFeat(FEAT_MINOR_SHAPESHIFT, oCaster)) nCLBonus += 1;
if (GetIsOfSubschool(iSpellId, SUBSCHOOL_GLAMER) && GetHasFeat(FEAT_FACECHANGER, oCaster)) nCLBonus += 1;
return nCLBonus;
}
else return 0;
}
int GetLevelByTypeArcane(object oCaster = OBJECT_SELF)
{
int iFirstArcane = GetPrimaryArcaneClass(oCaster);
int iBest = 0;
int iClass1 = GetClassByPosition(1, oCaster);
int iClass2 = GetClassByPosition(2, oCaster);
int iClass3 = GetClassByPosition(3, oCaster);
int iClass4 = GetClassByPosition(4, oCaster);
int iClass5 = GetClassByPosition(5, oCaster);
int iClass6 = GetClassByPosition(6, oCaster);
int iClass7 = GetClassByPosition(8, oCaster);
int iClass8 = GetClassByPosition(8, oCaster);
int iClass1Lev = GetLevelByPosition(1, oCaster);
int iClass2Lev = GetLevelByPosition(2, oCaster);
int iClass3Lev = GetLevelByPosition(3, oCaster);
int iClass4Lev = GetLevelByPosition(4, oCaster);
int iClass5Lev = GetLevelByPosition(5, oCaster);
int iClass6Lev = GetLevelByPosition(6, oCaster);
int iClass7Lev = GetLevelByPosition(7, oCaster);
int iClass8Lev = GetLevelByPosition(8, oCaster);
if (iClass1 == CLASS_TYPE_HEXBLADE) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
if (iClass2 == CLASS_TYPE_HEXBLADE) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
if (iClass3 == CLASS_TYPE_HEXBLADE) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0;
if (iClass4 == CLASS_TYPE_HEXBLADE) iClass4Lev = (iClass4Lev >= 4) ? (iClass4Lev / 2) : 0;
if (iClass5 == CLASS_TYPE_HEXBLADE) iClass5Lev = (iClass5Lev >= 4) ? (iClass5Lev / 2) : 0;
if (iClass6 == CLASS_TYPE_HEXBLADE) iClass6Lev = (iClass6Lev >= 4) ? (iClass6Lev / 2) : 0;
if (iClass7 == CLASS_TYPE_HEXBLADE) iClass7Lev = (iClass7Lev >= 4) ? (iClass7Lev / 2) : 0;
if (iClass8 == CLASS_TYPE_HEXBLADE) iClass8Lev = (iClass8Lev >= 4) ? (iClass8Lev / 2) : 0;
if (iClass1 == iFirstArcane) iClass1Lev += GetArcanePRCLevels(oCaster, iClass1);
if (iClass2 == iFirstArcane) iClass2Lev += GetArcanePRCLevels(oCaster, iClass2);
if (iClass3 == iFirstArcane) iClass3Lev += GetArcanePRCLevels(oCaster, iClass3);
if (iClass4 == iFirstArcane) iClass4Lev += GetArcanePRCLevels(oCaster, iClass4);
if (iClass5 == iFirstArcane) iClass5Lev += GetArcanePRCLevels(oCaster, iClass5);
if (iClass6 == iFirstArcane) iClass6Lev += GetArcanePRCLevels(oCaster, iClass6);
if (iClass7 == iFirstArcane) iClass7Lev += GetArcanePRCLevels(oCaster, iClass7);
if (iClass8 == iFirstArcane) iClass8Lev += GetArcanePRCLevels(oCaster, iClass8);
iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev);
iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev);
iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev);
iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass4Lev);
iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass5Lev);
iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass5Lev);
iClass7Lev += PracticedSpellcasting(oCaster, iClass7, iClass6Lev);
iClass8Lev += PracticedSpellcasting(oCaster, iClass8, iClass7Lev);
if (!GetIsArcaneClass(iClass1, oCaster)) iClass1Lev = 0;
if (!GetIsArcaneClass(iClass2, oCaster)) iClass2Lev = 0;
if (!GetIsArcaneClass(iClass3, oCaster)) iClass3Lev = 0;
if (!GetIsArcaneClass(iClass4, oCaster)) iClass4Lev = 0;
if (!GetIsArcaneClass(iClass5, oCaster)) iClass5Lev = 0;
if (!GetIsArcaneClass(iClass6, oCaster)) iClass6Lev = 0;
if (!GetIsArcaneClass(iClass7, oCaster)) iClass7Lev = 0;
if (!GetIsArcaneClass(iClass8, oCaster)) iClass8Lev = 0;
if (iClass1Lev > iBest) iBest = iClass1Lev;
if (iClass2Lev > iBest) iBest = iClass2Lev;
if (iClass3Lev > iBest) iBest = iClass3Lev;
if (iClass4Lev > iBest) iBest = iClass4Lev;
if (iClass5Lev > iBest) iBest = iClass5Lev;
if (iClass6Lev > iBest) iBest = iClass6Lev;
if (iClass7Lev > iBest) iBest = iClass7Lev;
if (iClass8Lev > iBest) iBest = iClass8Lev;
return iBest;
}
int GetLevelByTypeDivine(object oCaster = OBJECT_SELF)
{
int iFirstDivine = GetPrimaryDivineClass(oCaster);
int iBest = 0;
int iClass1 = GetClassByPosition(1, oCaster);
int iClass2 = GetClassByPosition(2, oCaster);
int iClass3 = GetClassByPosition(3, oCaster);
int iClass4 = GetClassByPosition(4, oCaster);
int iClass5 = GetClassByPosition(5, oCaster);
int iClass6 = GetClassByPosition(6, oCaster);
int iClass7 = GetClassByPosition(8, oCaster);
int iClass8 = GetClassByPosition(8, oCaster);
int iClass1Lev = GetLevelByPosition(1, oCaster);
int iClass2Lev = GetLevelByPosition(2, oCaster);
int iClass3Lev = GetLevelByPosition(3, oCaster);
int iClass4Lev = GetLevelByPosition(4, oCaster);
int iClass5Lev = GetLevelByPosition(5, oCaster);
int iClass6Lev = GetLevelByPosition(6, oCaster);
int iClass7Lev = GetLevelByPosition(7, oCaster);
int iClass8Lev = GetLevelByPosition(8, oCaster);
if (iClass1 == CLASS_TYPE_PALADIN || iClass1 == CLASS_TYPE_RANGER) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
if (iClass2 == CLASS_TYPE_PALADIN || iClass2 == CLASS_TYPE_RANGER) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
if (iClass3 == CLASS_TYPE_PALADIN || iClass3 == CLASS_TYPE_RANGER) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0;
if (iClass4 == CLASS_TYPE_PALADIN || iClass4 == CLASS_TYPE_RANGER) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
if (iClass5 == CLASS_TYPE_PALADIN || iClass5 == CLASS_TYPE_RANGER) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
if (iClass6 == CLASS_TYPE_PALADIN || iClass6 == CLASS_TYPE_RANGER) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0;
if (iClass7 == CLASS_TYPE_PALADIN || iClass7 == CLASS_TYPE_RANGER) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
if (iClass8 == CLASS_TYPE_PALADIN || iClass8 == CLASS_TYPE_RANGER) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
if (iClass1 == iFirstDivine) iClass1Lev += GetDivinePRCLevels(oCaster, iClass1);
if (iClass2 == iFirstDivine) iClass2Lev += GetDivinePRCLevels(oCaster, iClass2);
if (iClass3 == iFirstDivine) iClass3Lev += GetDivinePRCLevels(oCaster, iClass3);
if (iClass4 == iFirstDivine) iClass4Lev += GetDivinePRCLevels(oCaster, iClass4);
if (iClass5 == iFirstDivine) iClass5Lev += GetDivinePRCLevels(oCaster, iClass5);
if (iClass6 == iFirstDivine) iClass6Lev += GetDivinePRCLevels(oCaster, iClass6);
if (iClass7 == iFirstDivine) iClass7Lev += GetDivinePRCLevels(oCaster, iClass7);
if (iClass8 == iFirstDivine) iClass8Lev += GetDivinePRCLevels(oCaster, iClass8);
iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev);
iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev);
iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev);
iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass4Lev);
iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass5Lev);
iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass5Lev);
iClass7Lev += PracticedSpellcasting(oCaster, iClass7, iClass6Lev);
iClass8Lev += PracticedSpellcasting(oCaster, iClass8, iClass7Lev);
if (!GetIsDivineClass(iClass1, oCaster)) iClass1Lev = 0;
if (!GetIsDivineClass(iClass2, oCaster)) iClass2Lev = 0;
if (!GetIsDivineClass(iClass3, oCaster)) iClass3Lev = 0;
if (!GetIsDivineClass(iClass4, oCaster)) iClass4Lev = 0;
if (!GetIsDivineClass(iClass5, oCaster)) iClass5Lev = 0;
if (!GetIsDivineClass(iClass6, oCaster)) iClass6Lev = 0;
if (!GetIsDivineClass(iClass7, oCaster)) iClass7Lev = 0;
if (!GetIsDivineClass(iClass8, oCaster)) iClass8Lev = 0;
if (iClass1Lev > iBest) iBest = iClass1Lev;
if (iClass2Lev > iBest) iBest = iClass2Lev;
if (iClass3Lev > iBest) iBest = iClass3Lev;
if (iClass4Lev > iBest) iBest = iClass4Lev;
if (iClass5Lev > iBest) iBest = iClass5Lev;
if (iClass6Lev > iBest) iBest = iClass6Lev;
if (iClass7Lev > iBest) iBest = iClass7Lev;
if (iClass8Lev > iBest) iBest = iClass8Lev;
return iBest;
}
//:: Test Void
//void main (){}