forked from Jaysyn/PRC8
Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
3894 lines
161 KiB
Plaintext
3894 lines
161 KiB
Plaintext
//:://////////////////////////////////////////////////////////////////
|
|
//::
|
|
/*
|
|
* [prc_enforce_mark.nss] - Jaysyn 20230724
|
|
*
|
|
* This script checks that correct amount of prestige class marker
|
|
* feats are taken at the correct level
|
|
*
|
|
*/
|
|
//::
|
|
//:://////////////////////////////////////////////////////////////////
|
|
|
|
#include "prc_class_const"
|
|
#include "prc_feat_const"
|
|
|
|
//:; Enforces Abjurant Champion marker feats
|
|
int AbjurantChampionMarkerFeats();
|
|
|
|
//:; Enforces Acolyte of the Skin marker feats
|
|
int AoTSMarkerFeats();
|
|
|
|
//:; Enforces Master Alchemist marker feats
|
|
int AlchemistMarkerFeats();
|
|
|
|
//:; Enforces Alienist marker feats
|
|
int AlienistMarkerFeats();
|
|
|
|
//:; Enforces Anima Mage marker feats
|
|
int AnimaMageMarkerFeats();
|
|
|
|
//:; Enforces Archmage marker feats
|
|
int ArchmageMarkerFeats();
|
|
|
|
//:; Enforces Arcane Trickster marker feats
|
|
int ArcaneTricksterMarkerFeats();
|
|
|
|
//:; Enforces Disciple of Asmodeus marker feats
|
|
int DoAMarkerFeats();
|
|
|
|
//:; Enforces Black Flame Zealot marker feats
|
|
int BFZMarkerFeats();
|
|
|
|
//:; Enforces Blood Magus marker feats
|
|
int BloodMagusMarkerFeats();
|
|
|
|
//:; Enforces Talontar Blightlord marker feats
|
|
int BlightlordMarkerFeats();
|
|
|
|
//:; Enforces Bonded Summoner marker feats
|
|
int BondedSummonerMarkerFeats();
|
|
|
|
//:; Enforces Brimstone Speaker marker feats
|
|
int BrimstoneSpeakerMarkerFeats();
|
|
|
|
//:; Enforces Bladesinger marker feats
|
|
int BladesingerMarkerFeats();
|
|
|
|
//:; Enforces Cerebrmancer marker feats
|
|
int CerebremancerMarkerFeats();
|
|
|
|
//:; Enforces Combat Medic marker feats
|
|
int CombatMedicMarkerFeats();
|
|
|
|
//:; Enforces Contemplative marker feats
|
|
int ContemplativeMarkerFeats();
|
|
|
|
//:; Enforces Dragonheart Mage marker feats
|
|
int DragonheartMarkerFeats();
|
|
|
|
//:; Enforces Diabolist marker feats
|
|
int DiabolistMarkerFeats();
|
|
|
|
//:; Enforces Dragonsong Lyrist marker feats
|
|
int DragonsongLyristMarkerFeats();
|
|
|
|
//:; Enforces Eldritch Knight marker feats
|
|
int EldritchKnightMarkerFeats();
|
|
|
|
//:; Enforces Eldritch Disciple marker feats
|
|
int EldritchDiscipleMarkerFeats();
|
|
|
|
//:; Enforces Eldritch Theurge marker feats
|
|
int EldritchTheurgeMarkerFeats();
|
|
|
|
//:; Enforces Elemental Savant marker feats
|
|
int ElementalSavantMarkerFeats();
|
|
|
|
//:; Enforces Enlightend Fist marker feats
|
|
int EnlightendFistMarkerFeats();
|
|
|
|
//:; Enforces Fist of Raziel marker feats
|
|
int FistOfRazielMarkerFeats();
|
|
|
|
//:; Enforces Force Missile Mage marker feats
|
|
int FMMMarkerFeats();
|
|
|
|
//:; Enforces Fochulan Lyrist marker feats
|
|
int FochulanLyristMarkerFeats();
|
|
|
|
//:; Enforces Forest Master marker feats
|
|
int ForestMasterMarkerFeats();
|
|
|
|
//:; Enforces Frost Mage marker feats
|
|
int FrostMageMarkerFeats();
|
|
|
|
//:; Enforces Thrall of Grazzt marker feats
|
|
int ToGMarkerFeats();
|
|
|
|
//:; Enforces Harper Mage marker feats
|
|
int HarperMageMarkerFeats();
|
|
|
|
//:; Enforces Hathran marker feats
|
|
int HathranMarkerFeats();
|
|
|
|
//:; Enforces Havoc Mage marker feats
|
|
int HavocMageMarkerFeats();
|
|
|
|
//:; Enforces Heartwarder marker feats
|
|
int HeartwarderMarkerFeats();
|
|
|
|
//:; Enforces Hierophant marker feats
|
|
int HierophantMarkerFeats();
|
|
|
|
//:; Enforces Hospitaler marker feats
|
|
int HospitalerMarkerFeats();
|
|
|
|
//:; Enforces Jade Phoenix Mage marker feats
|
|
int JPMMarkerFeats();
|
|
|
|
//:; Enforces Drow Judicator marker feats
|
|
int JudicatorMarkerFeats();
|
|
|
|
//:; Enforces Mighty Contender of Kord marker feats
|
|
int MCoKMarkerFeats();
|
|
|
|
//:; Enforces Maester marker feats
|
|
int MaesterMarkerFeats();
|
|
|
|
//:; Enforces Magekiller marker feats
|
|
int MagekillerMarkerFeats();
|
|
|
|
//:; Enforces Master of Shrouds marker feats
|
|
int MoSMarkerFeats();
|
|
|
|
//:; Enforces Master Harper marker feats
|
|
int MasterHarperMarkerFeats();
|
|
|
|
//:; Enforces Morninglord of Lathander marker feats
|
|
int MorninglordMarkerFeats();
|
|
|
|
//:; Enforces Mystic Theurge marker feats
|
|
int MysticTheurgeMarkerFeats();
|
|
|
|
//:; Enforces Noctumancer marker feats
|
|
int NoctumancerMarkerFeats();
|
|
|
|
//:; Enforces Ollam marker feats
|
|
int OllamMarkerFeats();
|
|
|
|
//:; Enforces Oozemaster marker feats
|
|
int OozemasterMarkerFeats();
|
|
|
|
//:; Enforces Thrall of Orcus marker feats
|
|
int OrcusMarkerFeats();
|
|
|
|
//:; Enforces Pale Master marker feats
|
|
int PaleMasterMarkerFeats();
|
|
|
|
//:; Enforces Psychic Theurge marker feats
|
|
int PsychicTheurgeMarkerFeats();
|
|
|
|
//:; Enforces Rage Mage marker feats
|
|
int RageMageMarkerFeats();
|
|
|
|
//:; Enforces Red Wizard marker feats
|
|
int RedWizardMarkerFeats();
|
|
|
|
//:; Enforces Ruby Knight Vindicator marker feats
|
|
int RKVMarkerFeats();
|
|
|
|
//:; Enforces Runecaster marker feats
|
|
int RunecasterMarkerFeats();
|
|
|
|
//:; Enforces Sacred Fist marker feats
|
|
int SacredFistMarkerFeats();
|
|
|
|
//:; Enforces Sacred Purifier marker feats
|
|
int SacredPurifierMarkerFeats();
|
|
|
|
//:; Enforces Sapphire Hierarch marker feats
|
|
int SapphireHierarchMarkerFeats();
|
|
|
|
//:; Enforces Shadow Adept marker feats
|
|
int ShadowAdeptMarkerFeats();
|
|
|
|
//:; Enforces Shadowbane Stalker marker feats
|
|
int SBStalkerMarkerFeats();
|
|
|
|
//:; Enforces Shining Blade of Heironeous marker feats
|
|
int HeironeousMarkerFeats();
|
|
|
|
//:; Enforces Soulcaster marker feats
|
|
int SoulcasterMarkerFeats();
|
|
|
|
//:; Enforces Soulcaster marker feats
|
|
int SoulcasterMarkerFeats();
|
|
|
|
//:; Enforces Spelldancer marker feats
|
|
int SpelldancerMarkerFeats();
|
|
|
|
//:; Enforces Spellsword marker feats
|
|
int SpellswordMarkerFeats();
|
|
|
|
//:; Enforces Stormlord of Talos marker feats
|
|
int StormlordMarkerFeats();
|
|
|
|
//:; Enforces Battleguard of Tempus marker feats
|
|
int BGTMarkerFeats();
|
|
|
|
//:; Enforces Tenebrous Apostate marker feats
|
|
int TenebrousMarkerFeats();
|
|
|
|
//:; Enforces Talon of Tiamat marker feats
|
|
int TiamatMarkerFeats();
|
|
|
|
//:; Enforces True Necromancer marker feats
|
|
int TrueNecroMarkerFeats();
|
|
|
|
//:; Enforces Ultmate Magus marker feats
|
|
int UltMagusMarkerFeats();
|
|
|
|
//:; Enforces Unseen Seer marker feats
|
|
int UnseenMarkerFeats();
|
|
|
|
//:; Enforces Warpriest marker feats
|
|
int WarpriestMarkerFeats();
|
|
|
|
//:; Enforces Wayfarer Guide marker feats
|
|
int WayfarerMarkerFeats();
|
|
|
|
//:; Enforces Wild Mage marker feats
|
|
int WildMageMarkerFeats();
|
|
|
|
//:; Enforces War Wizard of Cormyr marker feats
|
|
int WWoCMarkerFeats();
|
|
|
|
|
|
/*///////////////////////////////////////
|
|
Begin Functions
|
|
*////////////////////////////////////////
|
|
|
|
//:; Enforces Abjurant Champion marker feats
|
|
int AbjurantChampionMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION))
|
|
{
|
|
int nAbChamp = GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_WIZARD);
|
|
|
|
if(nAbChamp > 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Abjurant Champion may only advance a single arcane or invoker class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nAbChamp < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Abjurant Champion must pick one arcane or invoker class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Acolyte of the Skin marker feats
|
|
int AoTSMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_ACOLYTE))
|
|
{
|
|
int nAcolyte = GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_UR_PRIEST)
|
|
+ GetHasFeat(FEAT_ACOLYTE_SPELLCASTING_CULTIST_PEAK);
|
|
|
|
if(nAcolyte > 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Acolyte of the Skin may only advance a single arcane, divine or invoker class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nAcolyte < 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Acolyte of the Skin must pick one arcane, divine or invoker class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Master Alchemist marker feats
|
|
int AlchemistMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST))
|
|
{
|
|
int nAlchemist = GetHasFeat(FEAT_ALCHEM_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_UR_PRIEST)
|
|
+ GetHasFeat(FEAT_ALCHEM_SPELLCASTING_VASSAL);
|
|
|
|
if(nAlchemist > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Master Alchemist may only advance a single arcane or divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nAlchemist < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Master Alchemist must pick one arcane or divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Alienist marker feats
|
|
int AlienistMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_ALIENIST))
|
|
{
|
|
int nAlienist = GetHasFeat(FEAT_ALIENIST_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_ALIENIST_SPELLCASTING_UR_PRIEST);
|
|
|
|
if(nAlienist > 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Alienist may only advance a single arcane or divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nAlienist < 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Alienist must pick one arcane or divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Anima Mage marker feats
|
|
int AnimaMageMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_ANIMA_MAGE))
|
|
{
|
|
int nAnima = GetHasFeat(FEAT_ANIMA_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_ANIMA_SPELLCASTING_CULTIST_PEAK);
|
|
|
|
if(nAnima > 1)
|
|
{
|
|
FloatingTextStringOnCreature("Anima Mage may only advance a single arcane or invoker class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nAnima < 1)
|
|
{
|
|
FloatingTextStringOnCreature("Anima Mage must pick one arcane or invoker class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Archmage marker feats
|
|
int ArchmageMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_ARCHMAGE))
|
|
{
|
|
int iArchClass = GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_WIZARD);
|
|
|
|
if(iArchClass > 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Archmage may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(iArchClass < 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Archmage must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Arcane Trickster marker feats
|
|
int ArcaneTricksterMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_ARCTRICK))
|
|
{
|
|
int nTrickster = GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_WIZARD);
|
|
|
|
if(nTrickster > 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Arcane Trickster may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nTrickster < 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Arcane Trickster must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Disciple of Asmodeus marker feats
|
|
int DoAMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS))
|
|
{
|
|
int nDoA = GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_UR_PRIEST);
|
|
|
|
if(nDoA > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Disciple of Asmodeus may only advance a single arcane or divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nDoA < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Disciple of Asmodeus must pick one arcane o divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Black Flame Zealot marker feats
|
|
int BFZMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_BFZ))
|
|
{
|
|
int nBFZ = GetHasFeat(FEAT_BFZ_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_BFZ_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_BFZ_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_BFZ_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_BFZ_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_BFZ_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_BFZ_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_BFZ_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_BFZ_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_BFZ_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_BFZ_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_BFZ_SPELLCASTING_UR_PRIEST);
|
|
|
|
if(nBFZ > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Black Flame Zealot may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nBFZ < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Black Flame Zealot must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Blood Magus marker feats
|
|
int BloodMagusMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS))
|
|
{
|
|
int nBlood = GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_WIZARD);
|
|
|
|
if(nBlood > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Blood Magus may only advance a single arcane or invoker class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nBlood < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Blood Magus must pick one arcane or invoker to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Talontar Blightlord marker feats
|
|
int BlightlordMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_BLIGHTLORD))
|
|
{
|
|
int nBlight = GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_SPSHAMAN);
|
|
|
|
if(nBlight > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Talontar Blightlord may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nBlight < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Talontar Blightlord must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Bonded Summoner marker feats
|
|
int BondedSummonerMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER))
|
|
{
|
|
int nBonded = GetHasFeat(FEAT_BONDED_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_BONDED_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_BONDED_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_BONDED_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_BONDED_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_BONDED_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_BONDED_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_BONDED_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_BONDED_SPELLCASTING_WIZARD);
|
|
|
|
if(nBonded > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Bonded Summoner may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nBonded < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Bonded Summoner must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Brimstone Speaker marker feats
|
|
int BrimstoneSpeakerMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER))
|
|
{
|
|
int nBrimstone = GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_VASSAL);
|
|
|
|
if(nBrimstone > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Brimstone Speaker may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nBrimstone < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Brimstone Speaker must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Bladesinger marker feats
|
|
int BladesingerMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_BLADESINGER))
|
|
{
|
|
int nBladesinger = GetHasFeat(FEAT_BSINGER_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_BSINGER_SPELLCASTING_WIZARD);
|
|
|
|
if(nBladesinger > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Bladesinger may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nBladesinger < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Bladesinger must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Cerebrmancer marker feats
|
|
int CerebremancerMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_CEREBREMANCER))
|
|
{
|
|
int nCerebrmancer = GetHasFeat(FEAT_CMANCER_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_CMANCER_SPELLCASTING_WIZARD);
|
|
|
|
if(nCerebrmancer > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Cerebrmancer may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nCerebrmancer < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Cerebrmancer must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Combat Medic marker feats
|
|
int CombatMedicMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC))
|
|
{
|
|
int nCombatMedic = GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_SPSHAMAN);
|
|
|
|
if(nCombatMedic > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Combat Medic may only advance a single class with Cure Light Wounds in its spell list.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nCombatMedic < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Combat Medic must pick one class with Cure Light Wounds in its spell list to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Contemplative marker feats
|
|
int ContemplativeMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE))
|
|
{
|
|
int nContemplative = GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_UR_PRIEST)
|
|
+ GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_VASSAL);
|
|
|
|
if(nContemplative > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Contemplative may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nContemplative < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Contemplative must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Dragonheart Mage marker feats
|
|
int DragonheartMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE))
|
|
{
|
|
int nDragonheart = GetHasFeat(FEAT_DHEART_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_DHEART_SPELLCASTING_WARMAGE);
|
|
|
|
if(nDragonheart > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Dragonheart Mage may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nDragonheart < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Dragonheart Mage must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Diabolist marker feats
|
|
int DiabolistMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_DIABOLIST))
|
|
{
|
|
int nDiabolist = GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_UR_PRIEST);
|
|
|
|
if(nDiabolist > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Diabolist may only advance a single arcane or divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nDiabolist < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Diabolist must pick one arcane or divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Dragonsong Lyrist marker feats
|
|
int DragonsongLyristMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST))
|
|
{
|
|
int nDragonsong = GetHasFeat(FEAT_DSONG_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_DSONG_SPELLCASTING_VASSAL);
|
|
|
|
if(nDragonsong > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Dragonsong Lyrist may only advance a single arcane or divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nDragonsong < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Dragonsong Lyrist must pick one arcane or divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Eldritch Knight marker feats
|
|
int EldritchKnightMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT))
|
|
{
|
|
int nEldKnight = GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_WIZARD);
|
|
|
|
if(nEldKnight > 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Eldritch Knight may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nEldKnight < 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Eldritch Knight must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Eldritch Disciple marker feats
|
|
int EldritchDiscipleMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE))
|
|
{
|
|
int nEldDisciple = GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_UR_PRIEST)
|
|
+ GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_VASSAL);
|
|
|
|
if(nEldDisciple > 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Eldritch Disciple may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nEldDisciple < 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Eldritch Disciple must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Eldritch Theurge marker feats
|
|
int EldritchTheurgeMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE))
|
|
{
|
|
int nEldTheurge = GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_CELEBRANT_SHARESS);
|
|
|
|
if(nEldTheurge > 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Eldritch Theurge may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nEldTheurge < 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Eldritch Theurge must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Elemental Savant marker feats
|
|
int ElementalSavantMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT))
|
|
{
|
|
int nElmSavant = GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_UR_PRIEST);
|
|
|
|
if(nElmSavant > 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Elemental Savant may only advance a single arcane or divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nElmSavant < 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Elemental Savant must pick one arcane or divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Enlightend Fist marker feats
|
|
int EnlightendFistMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST))
|
|
{
|
|
int nEnlighted = GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_WIZARD);
|
|
|
|
if(nEnlighted > 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Enlighted Fist may only advance a single arcane or invoker class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nEnlighted < 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Enlighted Fist must pick one arcane or invoker class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Fist of Raziel marker feats
|
|
int FistOfRazielMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST))
|
|
{
|
|
int nRaziel = GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_VASSAL);
|
|
|
|
if(nRaziel > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Fist of Raziel may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nRaziel < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Fist of Raziel must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Force Missile Mage marker feats
|
|
int FMMMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_FMM))
|
|
{
|
|
int nFMM = GetHasFeat(FEAT_FMM_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_FMM_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_FMM_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_FMM_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_FMM_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_FMM_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_FMM_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_FMM_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_FMM_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_DOMAIN_POWER_FORCE) //: Covers Cleric & Shaman
|
|
+ GetHasFeat(FEAT_FMM_SPELLCASTING_NENTYAR_HUNTER);
|
|
|
|
if(nFMM > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Force Missile Mage may only advance a single class with Magic Missile in its spell list.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nFMM < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Force Missile Mage must pick one class with Magic Missile in its spell list to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Fochulan Lyrist marker feats
|
|
int FochulanLyristMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(40)) //:: Potential future class slot for Fochulan Lyrist
|
|
{
|
|
int nFochulanArcane = GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_CULTIST_PEAK);
|
|
|
|
int nFochulanDivine = GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_FOCHULAN_LYRIST_SPELLCASTING_SPSHAMAN);
|
|
|
|
|
|
if(nFochulanArcane > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Fochulan Lyrist may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nFochulanArcane < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Fochulan Lyrist must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nFochulanDivine > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Fochulan Lyrist may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nFochulanDivine < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Fochulan Lyrist must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Forest Master marker feats
|
|
int ForestMasterMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_FORESTMASTER))
|
|
{
|
|
int nForestMaster = GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_SPSHAMAN);
|
|
|
|
if(nForestMaster > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Forest Master may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nForestMaster < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Forest Master must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Frost Mage marker feats
|
|
int FrostMageMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_FROST_MAGE))
|
|
{
|
|
int nFrostMage = GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_WIZARD);
|
|
|
|
if(nFrostMage > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Frost Mage may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nFrostMage < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Frost Mage must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Thrall of Grazzt marker feats
|
|
int ToGMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A))
|
|
{
|
|
int nGrazzt = GetHasFeat(FEAT_GRAZZT_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SPSHAMAN);
|
|
|
|
if(nGrazzt > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Thrall of Grazzt may only advance a single arcane, divine or invoker class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nGrazzt < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Thrall of Grazzt must pick one arcane, divine or invoker class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Harper Mage marker feats
|
|
int HarperMageMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_HARPERMAGE))
|
|
{
|
|
int nHarperMage = GetHasFeat(FEAT_HARPERM_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_HARPERM_SPELLCASTING_WIZARD);
|
|
|
|
if(nHarperMage > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Harper Mage may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nHarperMage < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Harper Mage must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Hathran marker feats
|
|
int HathranMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_HATHRAN))
|
|
{
|
|
int nHathranArcane = GetHasFeat(FEAT_HATHRAN_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_WIZARD);
|
|
|
|
int nHathranDivine = GetHasFeat(FEAT_HATHRAN_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_HATHRAN_SPELLCASTING_VASSAL);
|
|
|
|
|
|
if(nHathranArcane > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Hathran may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nHathranArcane < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Hathran must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nHathranDivine > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Hathran may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nHathranDivine < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Hathran must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Havoc Mage marker feats
|
|
int HavocMageMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_HAVOC_MAGE))
|
|
{
|
|
int nHavocMage = GetHasFeat(FEAT_HAVOC_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_HAVOC_SPELLCASTING_CELEBRANT_SHARESS);
|
|
|
|
if(nHavocMage > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Havoc Mage may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nHavocMage < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Havoc Mage must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Heartwarder marker feats
|
|
int HeartwarderMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_HEARTWARDER))
|
|
{
|
|
int nHeartwarder = GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_SPSHAMAN);
|
|
|
|
if(nHeartwarder > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Heartwarder may only advance a single arcane, divine or invoker class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nHeartwarder < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Heartwarder must pick one arcane, divine or invoker class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Hierophant marker feats
|
|
int HierophantMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_HIEROPHANT))
|
|
{
|
|
int nHierophant = GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_UR_PRIEST);
|
|
|
|
if(nHierophant > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Hierophant may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nHierophant < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Hierophant must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Hospitaler marker feats
|
|
int HospitalerMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_HOSPITALER))
|
|
{
|
|
int nHospitaler = GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_UR_PRIEST);
|
|
|
|
if(nHospitaler > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Hospitaler may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nHospitaler < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Hospitaler must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Jade Phoenix Mage marker feats
|
|
int JPMMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE))
|
|
{
|
|
int nJPM = GetHasFeat(FEAT_JPM_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_JPM_SPELLCASTING_WIZARD);
|
|
|
|
if(nJPM > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Jade Phoenis Mage may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nJPM < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Jade Phoenis Mage must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Drow Judicator marker feats
|
|
int JudicatorMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_JUDICATOR))
|
|
{
|
|
int nJudicator = GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_UR_PRIEST);
|
|
|
|
if(nJudicator > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Drow Judicator may only advance a single arcane, divine or invoker class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nJudicator < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Drow Judicator must pick one arcane, divine or invoker class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Mighty Contender of Kord marker feats
|
|
int MCoKMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD))
|
|
{
|
|
int nJudicator = GetHasFeat(FEAT_KORD_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_KORD_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_KORD_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_KORD_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_KORD_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_KORD_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_KORD_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_KORD_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_KORD_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_KORD_SPELLCASTING_SPSHAMAN);
|
|
|
|
if(nJudicator > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Mighty Contender of Kord may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nJudicator < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Mighty Contender of Kord must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Maester marker feats
|
|
int MaesterMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_MAESTER))
|
|
{
|
|
int nMaester = GetHasFeat(FEAT_MAESTER_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_WIZARD);
|
|
|
|
if(nMaester > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Maester may only advance a single arcane or invoker class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nMaester < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Maester must pick one arcane or invoker class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Magekiller marker feats
|
|
int MagekillerMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_MAGEKILLER))
|
|
{
|
|
int nMagekiller = GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_UR_PRIEST);
|
|
|
|
if(nMagekiller > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Mage Killer may only advance a single arcane or divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nMagekiller < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Mage Killer must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Master of Shrouds marker feats
|
|
int MoSMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS))
|
|
{
|
|
int nMoS = GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_SPSHAMAN);
|
|
|
|
if(nMoS > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Master of Shrouds may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nMoS < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Master of Shrouds must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Master Harper marker feats
|
|
int MasterHarperMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_MASTER_HARPER))
|
|
{
|
|
int nMasterHaper = GetHasFeat(FEAT_MHARPER_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_VASSAL)
|
|
+ GetHasFeat(FEAT_MHARPER_SPELLCASTING_SUEL_ARCHANAMACH);
|
|
|
|
if(nMasterHaper > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Master Harper may only advance a single arcane or divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nMasterHaper < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Master Harper must pick one arcane or divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Morninglord of Lathander marker feats
|
|
int MorninglordMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS))
|
|
{
|
|
int nMorninglord = GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_SPSHAMAN);
|
|
|
|
if(nMorninglord > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Morninglord of Lathander may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nMorninglord < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Morninglord of Lathander must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Mystic Theurge marker feats
|
|
int MysticTheurgeMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE))
|
|
{
|
|
int nMysticDivine = GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_UR_PRIEST)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_VASSAL);
|
|
|
|
int nMysticArcane = GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_WIZARD);
|
|
|
|
if(nMysticDivine > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Mystic Theurge may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nMysticDivine < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Mystic Theurge must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nMysticArcane > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Mystic Theurge may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nMysticArcane < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Mystic Theurge must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Noctumancer marker feats
|
|
int NoctumancerMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_NOCTUMANCER))
|
|
{
|
|
int nNoctumancer = GetHasFeat(FEAT_MAESTER_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_MAESTER_SPELLCASTING_WIZARD);
|
|
|
|
if(nNoctumancer > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Noctumancer may only advance a single arcane or invoker class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nNoctumancer < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Noctumancer must pick one arcane or invoker class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Ollam marker feats
|
|
int OllamMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_OLLAM))
|
|
{
|
|
int nOllam = GetHasFeat(FEAT_OLLAM_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_OLLAM_SPELLCASTING_VASSAL);
|
|
|
|
if(nOllam > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Ollam may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nOllam < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Ollam must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Oozemaster marker feats
|
|
int OozemasterMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_OOZEMASTER))
|
|
{
|
|
int nOozemaster = GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_UR_PRIEST)
|
|
+ GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_VASSAL);
|
|
|
|
if(nOozemaster > 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Oozemaster may only advance a single arcane or divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nOozemaster < 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Oozemaster must pick one arcane or divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Thrall of Orcus marker feats
|
|
int OrcusMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_ORCUS))
|
|
{
|
|
int nOrcus = GetHasFeat(FEAT_ORCUS_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_ORCUS_SPELLCASTING_WARMAGE);
|
|
|
|
if(nOrcus > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Thrall of Orcus may only advance a single arcane or divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nOrcus < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Thrall of Orcus must pick one arcane or divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Pale Master marker feats
|
|
int PaleMasterMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_PALEMASTER) || GetLevelByClass(CLASS_TYPE_PALE_MASTER))
|
|
{
|
|
int nPaleMaster = GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_WIZARD);
|
|
|
|
if(nPaleMaster > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Pale Master may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nPaleMaster < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Pale Master must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Psychic Theurge marker feats
|
|
int PsychicTheurgeMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE))
|
|
{
|
|
int nPsyTheurgeDivine = GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_UR_PRIEST)
|
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_VASSAL);
|
|
|
|
if(nPsyTheurgeDivine > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Psychic Theurge may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nPsyTheurgeDivine < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Psychic Theurge must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Rage Mage marker feats
|
|
int RageMageMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_RAGE_MAGE))
|
|
{
|
|
int nRageMage = GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_CELEBRANT_SHARESS);
|
|
|
|
if(nRageMage > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Rage Mage may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nRageMage < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Rage Mage must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Red Wizard marker feats
|
|
int RedWizardMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_RED_WIZARD))
|
|
{
|
|
int nRedWizard = GetHasFeat(FEAT_REDWIZ_SPELLCASTING_WIZARD);
|
|
|
|
if(nRedWizard > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Red Wizard may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nRedWizard < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Red Wizard must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Ruby Knight Vindicator marker feats
|
|
int RKVMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR))
|
|
{
|
|
int nRKV = GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_UR_PRIEST)
|
|
+ GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_VASSAL);
|
|
|
|
if(nRKV > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Ruby Knight Vindicator may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nRKV < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Ruby Knight Vindicator must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Runecaster marker feats
|
|
int RunecasterMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_RUNECASTER))
|
|
{
|
|
int nRunecaster = GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_UR_PRIEST)
|
|
+ GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_VASSAL);
|
|
|
|
if(nRunecaster > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Runecaster may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nRunecaster < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Runecaster must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Sacred Fist marker feats
|
|
int SacredFistMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_SACREDFIST))
|
|
{
|
|
int nSacredFist = GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_UR_PRIEST)
|
|
+ GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_VASSAL);
|
|
|
|
if(nSacredFist > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Sacred Fist may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nSacredFist < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Sacred Fist must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Sacred Purifier marker feats
|
|
int SacredPurifierMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_SACREDPURIFIER))
|
|
{
|
|
int nSacredPurifier = GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_VASSAL);
|
|
|
|
if(nSacredPurifier > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Sacred Purifier may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nSacredPurifier < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Sacred Purifier must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Sapphire Hierarch marker feats
|
|
int SapphireHierarchMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH))
|
|
{
|
|
int nSapphireHierarch = GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_UR_PRIEST)
|
|
+ GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_VASSAL);
|
|
|
|
if(nSapphireHierarch > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Sapphire Hierarch may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nSapphireHierarch < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Sapphire Hierarch must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Shadow Adept marker feats
|
|
int ShadowAdeptMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT))
|
|
{
|
|
int nShadowAdept = GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_UR_PRIEST);
|
|
|
|
if(nShadowAdept > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Shadow Adept may only advance a single arcane or divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nShadowAdept < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Shadow Adept must pick one arcane or divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Shadowbane Stalker marker feats
|
|
int SBStalkerMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER))
|
|
{
|
|
int nSBStalker = GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_VASSAL);
|
|
|
|
if(nSBStalker > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Shadowbane Stalker may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nSBStalker < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Shadowbane Stalker must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Shining Blade of Heironeous marker feats
|
|
int HeironeousMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_SHINING_BLADE))
|
|
{
|
|
int nSBHeironeous = GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_VASSAL);
|
|
|
|
if(nSBHeironeous > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Shining Blade of Heironeous may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nSBHeironeous < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Shining Blade of Heironeous must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Soulcaster marker feats
|
|
int SoulcasterMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_SOULCASTER))
|
|
{
|
|
int nSoulcaster = GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_WIZARD);
|
|
|
|
if(nSoulcaster > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Soulcaster may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nSoulcaster < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Soulcaster must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Spelldancer marker feats
|
|
int SpelldancerMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_SPELLDANCER))
|
|
{
|
|
int nSpelldancer = GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_UR_PRIEST)
|
|
+ GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_VASSAL);
|
|
|
|
if(nSpelldancer > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Spelldancer may only advance a single arcane or divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nSpelldancer < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Spelldancer must pick one arcane or divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Spellsword marker feats
|
|
int SpellswordMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_SPELLSWORD))
|
|
{
|
|
int nSpellsword = GetHasFeat(FEAT_SSWORD_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_SSWORD_SPELLCASTING_CELEBRANT_SHARESS);
|
|
|
|
if(nSpellsword > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Spellsword may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nSpellsword < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Spellsword must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Stormlord of Talos marker feats
|
|
int StormlordMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_STORMLORD))
|
|
{
|
|
int nStormlord = GetHasFeat(FEAT_STORMLORD_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_STORMLORD_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_STORMLORD_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_STORMLORD_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_STORMLORD_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_STORMLORD_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_STORMLORD_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_STORMLORD_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_STORMLORD_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_STORMLORD_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_STORMLORD_SPELLCASTING_SPSHAMAN);
|
|
|
|
if(nStormlord > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Stormlord of Talos may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nStormlord < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Stormlord of Talos must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Swift Wing marker feats
|
|
int SwiftWingMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_SWIFT_WING))
|
|
{
|
|
int nSwiftWing = GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_DOMIEL)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_HEALER)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_KNIGHT_CHALICE)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_KNIGHT_MIDDLECIRCLE)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_NENTYAR_HUNTER)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_PALADIN)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_SOL)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_UR_PRIEST)
|
|
+ GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_VASSAL);
|
|
|
|
if(nSwiftWing > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Swift Wing may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nSwiftWing < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Swift Wing must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Battleguard of Tempus marker feats
|
|
int BGTMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_TEMPUS))
|
|
{
|
|
int nBGT = GetHasFeat(FEAT_TEMPUS_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_TEMPUS_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_TEMPUS_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_TEMPUS_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_TEMPUS_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_TEMPUS_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_TEMPUS_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_TEMPUS_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_TEMPUS_SPELLCASTING_SPSHAMAN);
|
|
|
|
if(nBGT > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Battleguard of Tempus may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nBGT < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Battleguard of Tempus must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Tenebrous Apostate marker feats
|
|
int TenebrousMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE))
|
|
{
|
|
int nTenebrous = GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_SPSHAMAN)
|
|
+ GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_UR_PRIEST);
|
|
|
|
if(nTenebrous > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Tenebrous Apostate may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nTenebrous < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Tenebrous Apostate must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Talon of Tiamat marker feats
|
|
int TiamatMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT))
|
|
{
|
|
int nTiamat = GetHasFeat(FEAT_TIAMAT_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_DRUID)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SOHEI)
|
|
+ GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SPSHAMAN);
|
|
|
|
if(nTiamat > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Talon of Tiamat may only advance a single arcane, divine or invoker class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nTiamat < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Talon of Tiamat must pick one arcane, divine or invoker class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces True Necromancer marker feats
|
|
int TrueNecroMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_TRUENECRO))
|
|
{
|
|
int nTrueNecroArc = GetHasFeat(FEAT_TNECRO_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_TNECRO_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_TNECRO_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_TNECRO_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_TNECRO_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_TNECRO_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_TNECRO_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_TNECRO_SPELLCASTING_SUBLIME_CHORD);
|
|
|
|
int nTrueNecroDiv = GetHasFeat(FEAT_TNECRO_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_TNECRO_SPELLCASTING_BLIGHTER)
|
|
+ GetHasFeat(FEAT_TNECRO_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_TNECRO_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_TNECRO_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_TNECRO_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_TNECRO_SPELLCASTING_UR_PRIEST);
|
|
|
|
if(nTrueNecroArc > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A True Necromancer may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nTrueNecroArc < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A True Necromancer must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nTrueNecroDiv > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A True Necromancer may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nTrueNecroDiv < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A True Necromancer must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Ultmate Magus marker feats
|
|
int UltMagusMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(188)) //:: Ultimate Magus
|
|
{
|
|
int nUltMagus = GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_WARMAGE);
|
|
|
|
if(nUltMagus > 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Ultmate Magus may only advance a single spontaneous arcane class alongside their Wizard progression.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nUltMagus < 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Ultmate Magus must pick one spontaneous arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Unseen Seer marker feats
|
|
int UnseenMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_UNSEEN_SEER))
|
|
{
|
|
int nUnseen = GetHasFeat(FEAT_UNSEEN_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_UNSEEN_SPELLCASTING_WIZARD);
|
|
|
|
if(nUnseen > 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Unseen Seer may only advance a single arcane or invoker class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nUnseen < 1)
|
|
{
|
|
FloatingTextStringOnCreature("An Unseen Seer must pick one arcane or invoker class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Virtuoso marker feats
|
|
int VirtuosoMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_VIRTUOSO))
|
|
{
|
|
int nVirtuoso = GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_WIZARD);
|
|
|
|
if(nVirtuoso > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Virtuoso may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nVirtuoso < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Virtuoso must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Warpriest marker feats
|
|
int WarpriestMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_WARPRIEST))
|
|
{
|
|
int nWarpriest = GetHasFeat(FEAT_TEMPUS_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_TEMPUS_SPELLCASTING_BLACKGUARD)
|
|
+ GetHasFeat(FEAT_TEMPUS_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_TEMPUS_SPELLCASTING_FAVOURED_SOUL)
|
|
+ GetHasFeat(FEAT_TEMPUS_SPELLCASTING_JUSTICEWW)
|
|
+ GetHasFeat(FEAT_TEMPUS_SPELLCASTING_OCULAR)
|
|
+ GetHasFeat(FEAT_TEMPUS_SPELLCASTING_RANGER)
|
|
+ GetHasFeat(FEAT_TEMPUS_SPELLCASTING_OASHAMAN)
|
|
+ GetHasFeat(FEAT_TEMPUS_SPELLCASTING_SPSHAMAN);
|
|
|
|
if(nWarpriest > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Warpriest may only advance a single divine class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nWarpriest < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Warpriest must pick one divine class to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Wayfarer Guide marker feats
|
|
int WayfarerMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE))
|
|
{
|
|
int nWayfarer = GetHasFeat(FEAT_WAYFARER_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_WAYFARER_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_WAYFARER_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_WAYFARER_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_WAYFARER_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_WAYFARER_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_WAYFARER_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_WAYFARER_SPELLCASTING_WIZARD)
|
|
+ GetHasFeat(FEAT_WAYFARER_SPELLCASTING_ARCHIVIST)
|
|
+ GetHasFeat(FEAT_WAYFARER_SPELLCASTING_CLERIC)
|
|
+ GetHasFeat(FEAT_WAYFARER_SPELLCASTING_OASHAMAN);
|
|
|
|
if(nWayfarer > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Wayfarer Guide may only advance a single class with teleport on its spell list.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nWayfarer < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Wayfarer Guide must pick one class with teleport in its list to advance at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces Wild Mage marker feats
|
|
int WildMageMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_WILD_MAGE))
|
|
{
|
|
int nWildMage = GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_ASSASSIN)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_HARPER)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_WIZARD);
|
|
|
|
if(nWildMage > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Wild Mage may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nWildMage < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A Wild Mage must pick one arcane class at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//:; Enforces War Wizard of Cormyr marker feats
|
|
int WWoCMarkerFeats()
|
|
{
|
|
if(GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR))
|
|
{
|
|
int nWWoC = GetHasFeat(FEAT_WWOC_SPELLCASTING_FEY)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_ABERRATION)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_MONSTROUS)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_OUTSIDER)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_SHAPECHANGER)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_BARD)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_BEGUILER)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_CELEBRANT_SHARESS)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_CULTIST_PEAK)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_DNECRO)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_DUSKBLADE)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_HEXBLADE)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_KNIGHT_WEAVE)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_SHADOWLORD)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_SORCERER)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_SUBLIME_CHORD)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_SUEL_ARCHANAMACH)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_WARMAGE)
|
|
+ GetHasFeat(FEAT_WWOC_SPELLCASTING_WIZARD);
|
|
|
|
if(nWWoC > 1)
|
|
{
|
|
FloatingTextStringOnCreature("A War Wizard of Cormyr may only advance a single arcane class.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
if(nWWoC < 1)
|
|
{
|
|
FloatingTextStringOnCreature("A War Wizard of Cormyr must pick one arcane class at first level.", OBJECT_SELF, FALSE);
|
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
|
|
void main()
|
|
{
|
|
//:: If any of these conditions are true, relevel the character.
|
|
if(AbjurantChampionMarkerFeats()
|
|
|| AoTSMarkerFeats()
|
|
|| AlchemistMarkerFeats()
|
|
|| AlienistMarkerFeats()
|
|
|| AnimaMageMarkerFeats()
|
|
|| ArchmageMarkerFeats()
|
|
|| ArcaneTricksterMarkerFeats()
|
|
|| DoAMarkerFeats()
|
|
|| BFZMarkerFeats()
|
|
|| BloodMagusMarkerFeats()
|
|
|| BlightlordMarkerFeats()
|
|
|| BondedSummonerMarkerFeats()
|
|
|| BrimstoneSpeakerMarkerFeats()
|
|
|| BladesingerMarkerFeats()
|
|
|| CerebremancerMarkerFeats()
|
|
|| CombatMedicMarkerFeats()
|
|
|| ContemplativeMarkerFeats()
|
|
|| DragonheartMarkerFeats()
|
|
|| DiabolistMarkerFeats()
|
|
|| DragonsongLyristMarkerFeats()
|
|
|| EldritchKnightMarkerFeats()
|
|
|| EldritchDiscipleMarkerFeats()
|
|
|| EldritchTheurgeMarkerFeats()
|
|
|| ElementalSavantMarkerFeats()
|
|
|| EnlightendFistMarkerFeats()
|
|
|| FistOfRazielMarkerFeats()
|
|
|| FMMMarkerFeats()
|
|
|| FochulanLyristMarkerFeats()
|
|
|| ForestMasterMarkerFeats()
|
|
|| FrostMageMarkerFeats()
|
|
|| ToGMarkerFeats()
|
|
|| HarperMageMarkerFeats()
|
|
|| HathranMarkerFeats()
|
|
|| HavocMageMarkerFeats()
|
|
|| HeartwarderMarkerFeats()
|
|
|| HierophantMarkerFeats()
|
|
|| HospitalerMarkerFeats()
|
|
|| JPMMarkerFeats()
|
|
|| JudicatorMarkerFeats()
|
|
|| MCoKMarkerFeats()
|
|
|| MaesterMarkerFeats()
|
|
|| MagekillerMarkerFeats()
|
|
|| MoSMarkerFeats()
|
|
|| MasterHarperMarkerFeats()
|
|
|| MorninglordMarkerFeats()
|
|
|| MysticTheurgeMarkerFeats()
|
|
|| NoctumancerMarkerFeats()
|
|
|| OllamMarkerFeats()
|
|
|| OozemasterMarkerFeats()
|
|
|| OrcusMarkerFeats()
|
|
|| PaleMasterMarkerFeats()
|
|
|| PsychicTheurgeMarkerFeats()
|
|
|| RageMageMarkerFeats()
|
|
|| RedWizardMarkerFeats()
|
|
|| RKVMarkerFeats()
|
|
|| RunecasterMarkerFeats()
|
|
|| SacredFistMarkerFeats()
|
|
|| SacredPurifierMarkerFeats()
|
|
|| SapphireHierarchMarkerFeats()
|
|
|| ShadowAdeptMarkerFeats()
|
|
|| SBStalkerMarkerFeats()
|
|
|| HeironeousMarkerFeats()
|
|
|| SoulcasterMarkerFeats()
|
|
|| SpelldancerMarkerFeats()
|
|
|| SpellswordMarkerFeats()
|
|
|| StormlordMarkerFeats()
|
|
|| SwiftWingMarkerFeats()
|
|
|| BGTMarkerFeats()
|
|
|| TenebrousMarkerFeats()
|
|
|| TiamatMarkerFeats()
|
|
|| TrueNecroMarkerFeats()
|
|
|| UltMagusMarkerFeats()
|
|
|| UnseenMarkerFeats()
|
|
|| VirtuosoMarkerFeats()
|
|
|| WarpriestMarkerFeats()
|
|
|| WayfarerMarkerFeats()
|
|
|| WildMageMarkerFeats()
|
|
|| WWoCMarkerFeats())
|
|
{
|
|
int nHD = GetHitDice(OBJECT_SELF);
|
|
int nMinXPForLevel = ((nHD * (nHD - 1)) / 2) * 1000;
|
|
int nOldXP = GetXP(OBJECT_SELF);
|
|
int nNewXP = nMinXPForLevel - 1000;
|
|
SetXP(OBJECT_SELF, nNewXP);
|
|
DelayCommand(0.2, SetXP(OBJECT_SELF, nOldXP));
|
|
SetLocalInt(OBJECT_SELF, "RelevelXP", nOldXP);
|
|
}
|
|
} |