1119 lines
38 KiB
Plaintext
1119 lines
38 KiB
Plaintext
|
//:://////////////////////////////////////////////////////////////////
|
||
|
//::
|
||
|
/*
|
||
|
* [prc_enforce_mark.nss] - Jaysyn 20240204
|
||
|
*
|
||
|
* 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 Alienist marker feats
|
||
|
int AlienistMarkerFeats();
|
||
|
|
||
|
//:; Enforces Anima Mage marker feats
|
||
|
int AnimaMageMarkerFeats();
|
||
|
|
||
|
//:; Enforces Arcane Trickster marker feats
|
||
|
int ArcaneTricksterMarkerFeats();
|
||
|
|
||
|
//:; Enforces Disciple of Asmodeus marker feats
|
||
|
int DoAMarkerFeats();
|
||
|
|
||
|
//:; Enforces Blood Magus marker feats
|
||
|
int BloodMagusMarkerFeats();
|
||
|
|
||
|
//:: Enforces Cerebrmancer marker feats
|
||
|
int CerebremancerMarkerFeats();
|
||
|
|
||
|
//:: Enforces Diamond Dragon marker feats
|
||
|
int DiamondDragonMarkerFeats();
|
||
|
|
||
|
//:; Enforces Dragonsong Lyrist marker feats
|
||
|
int DragonsongLyristMarkerFeats();
|
||
|
|
||
|
//:; Enforces Eldritch Disciple marker feats
|
||
|
int EldritchDiscipleMarkerFeats();
|
||
|
|
||
|
//:; Enforces Elemental Savant marker feats
|
||
|
int ElementalSavantMarkerFeats();
|
||
|
|
||
|
//:; Enforces Enlightend Fist marker feats
|
||
|
int EnlightendFistMarkerFeats();
|
||
|
|
||
|
//:; Enforces Iron Mind marker feats
|
||
|
int IronMindMarkerFeats();
|
||
|
|
||
|
//:; Enforces Maester marker feats
|
||
|
int MaesterMarkerFeats();
|
||
|
|
||
|
//:: Enforces Master of Shadows marker feats
|
||
|
int MasterShadowMarkerFeats();
|
||
|
|
||
|
//:; 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 Psychic Theurge marker feats
|
||
|
int PsychicTheurgeMarkerFeats();
|
||
|
|
||
|
//:: Enforces Sancified Mind marker feats
|
||
|
int SanctifiedMindMarkerFeats();
|
||
|
|
||
|
//:: Enforces Shadow Mind marker feats
|
||
|
int ShadowMindMarkerFeats();
|
||
|
|
||
|
//:: Enforces Soulcaster marker feats
|
||
|
int SoulcasterMarkerFeats();
|
||
|
|
||
|
//:: Enforces Thrallherd marker feats
|
||
|
int ThrallherdMarkerFeats();
|
||
|
|
||
|
//:; Enforces Talon of Tiamat marker feats
|
||
|
int TiamatMarkerFeats();
|
||
|
|
||
|
//:; Enforces Unseen Seer marker feats
|
||
|
int UnseenMarkerFeats();
|
||
|
|
||
|
//:; Enforces Wild Mage marker feats
|
||
|
int WildMageMarkerFeats();
|
||
|
|
||
|
/*///////////////////////////////////////
|
||
|
Begin Functions
|
||
|
*////////////////////////////////////////
|
||
|
|
||
|
//:; Enforces Abjurant Champion marker feats
|
||
|
int AbjurantChampionMarkerFeats()
|
||
|
{
|
||
|
if(GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION))
|
||
|
{
|
||
|
int nAbChamp = GetHasFeat(FEAT_ABCHAMP_INVOKING_WARLOCK)
|
||
|
+ GetHasFeat(FEAT_ABCHAMP_INVOKING_DFA)
|
||
|
+ GetHasFeat(FEAT_ABCHAMP_INVOKING_DRAGON_SHAMAN)
|
||
|
+ GetHasFeat(FEAT_ABCHAMP_NONE);
|
||
|
|
||
|
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_AOTS_INVOKING_WARLOCK)
|
||
|
+ GetHasFeat(FEAT_AOTS_INVOKING_DFA)
|
||
|
+ GetHasFeat(FEAT_AOTS_MYSTERY_SHADOWCASTER)
|
||
|
+ GetHasFeat(FEAT_AOTS_MYSTERY_SHADOWSMITH)
|
||
|
+ GetHasFeat(FEAT_AOTS_NONE);
|
||
|
|
||
|
if(nAcolyte > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("An Acolyte of the Skin may only advance a single arcane, shadowcasting 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, shadowcasting or invoker 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_MYSTERY_SHADOWCASTER)
|
||
|
+ GetHasFeat(FEAT_ALIENIST_MYSTERY_SHADOWSMITH)
|
||
|
+ GetHasFeat(FEAT_ALIENIST_NONE);
|
||
|
|
||
|
if(nAlienist > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("An Alienist may only advance a single arcane, shadowcasting 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, shadowcasting 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_INVOKING_WARLOCK)
|
||
|
+ GetHasFeat(FEAT_ANIMA_INVOKING_DFA)
|
||
|
+ GetHasFeat(FEAT_ANIMA_NONE);
|
||
|
|
||
|
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 Arcane Trickster marker feats
|
||
|
int ArcaneTricksterMarkerFeats()
|
||
|
{
|
||
|
if(GetLevelByClass(CLASS_TYPE_ARCTRICK))
|
||
|
{
|
||
|
int nTrickster = GetHasFeat(FEAT_ARCTRICK_INVOKING_WARLOCK)
|
||
|
+ GetHasFeat(FEAT_ARCTRICK_INVOKING_DFA)
|
||
|
+ GetHasFeat(FEAT_ARCTRICK_NONE);
|
||
|
|
||
|
if(nTrickster > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("An Arcane Trickster may only advance a single arcane or invoker 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 or invoker 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_NONE)
|
||
|
+ GetHasFeat(FEAT_ASMODEUS_INVOKING_WARLOCK)
|
||
|
+ GetHasFeat(FEAT_ASMODEUS_INVOKING_DFA)
|
||
|
+ GetHasFeat(FEAT_ASMODEUS_INVOKING_DRAGON_SHAMAN)
|
||
|
+ GetHasFeat(FEAT_ASMODEUS_MYSTERY_SHADOWCASTER)
|
||
|
+ GetHasFeat(FEAT_ASMODEUS_MYSTERY_SHADOWSMITH);
|
||
|
|
||
|
if(nDoA > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Disciple of Asmodeus may only advance a single arcane, shadowcasting or invoker 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, shadowcasting or invoker 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_INVOKING_WARLOCK)
|
||
|
+ GetHasFeat(FEAT_BLDMAGUS_INVOKING_DFA)
|
||
|
+ GetHasFeat(FEAT_BLDMAGUS_NONE);
|
||
|
|
||
|
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 Cerebrmancer marker feats
|
||
|
int CerebremancerMarkerFeats()
|
||
|
{
|
||
|
if(GetLevelByClass(CLASS_TYPE_CEREBREMANCER))
|
||
|
{
|
||
|
int nCereb = GetHasFeat(FEAT_CEREBREMANCER_MANIFEST_FOZ)
|
||
|
+ GetHasFeat(FEAT_CEREBREMANCER_MANIFEST_PSION)
|
||
|
+ GetHasFeat(FEAT_CEREBREMANCER_MANIFEST_PSYROUGE)
|
||
|
+ GetHasFeat(FEAT_CEREBREMANCER_MANIFEST_PSYWAR)
|
||
|
+ GetHasFeat(FEAT_CEREBREMANCER_MANIFEST_WARMIND)
|
||
|
+ GetHasFeat(FEAT_CEREBREMANCER_MANIFEST_WILDER);
|
||
|
|
||
|
if(nCereb > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Cerebremancer may only advance a single psionic class.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if(nCereb < 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Cerebremancer must pick one psionic class to advance at first level.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
//:: Enforce Child of Night marker feats
|
||
|
int CoNMarkerFeats()
|
||
|
{
|
||
|
if(GetLevelByClass(CLASS_TYPE_CHILD_OF_NIGHT))
|
||
|
{
|
||
|
int nChild = GetHasFeat(FEAT_CHILDNIGHT_MYSTERY_SHADOWCASTER)
|
||
|
+ GetHasFeat(FEAT_CHILDNIGHT_MYSTERY_SHADOWSMITH);
|
||
|
|
||
|
if(nChild > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Child of Night may only advance a single shadowcasting class.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if(nChild < 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Child of Night must pick one shadowcasting class to advance at first level.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
//:: Enforces Diamond Dragon marker feats
|
||
|
int DiamondDragonMarkerFeats()
|
||
|
{
|
||
|
if(GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, OBJECT_SELF) > 1)
|
||
|
{
|
||
|
int nDiaDrag = GetHasFeat(FEAT_DIAMOND_DRAGON_MANIFEST_FOZ)
|
||
|
+ GetHasFeat(FEAT_DIAMOND_DRAGON_MANIFEST_PSION)
|
||
|
+ GetHasFeat(FEAT_DIAMOND_DRAGON_MANIFEST_PSYROUGE)
|
||
|
+ GetHasFeat(FEAT_DIAMOND_DRAGON_MANIFEST_PSYWAR)
|
||
|
+ GetHasFeat(FEAT_DIAMOND_DRAGON_MANIFEST_WARMIND)
|
||
|
+ GetHasFeat(FEAT_DIAMOND_DRAGON_MANIFEST_WILDER);
|
||
|
|
||
|
if(nDiaDrag > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Diamond Dragon may only advance a single psionic class.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if(nDiaDrag < 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Diamond Dragon must pick one psionic class to advance at second 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_DRAGONSONG_NONE)
|
||
|
+ GetHasFeat(FEAT_DRAGONSONG_MYSTERY_SHADOWCASTER)
|
||
|
+ GetHasFeat(FEAT_DRAGONSONG_MYSTERY_SHADOWSMITH);
|
||
|
|
||
|
if(nDragonsong > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Dragonsong Lyrist may only advance a single arcane or shadowcasting 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 shadowcasting 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_INVOKING_WARLOCK)
|
||
|
+ GetHasFeat(FEAT_ELDISCIPLE_INVOKING_DFA);
|
||
|
|
||
|
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 Elemental Savant marker feats
|
||
|
int ElementalSavantMarkerFeats()
|
||
|
{
|
||
|
if(GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT))
|
||
|
{
|
||
|
int nElmSavant = GetHasFeat(FEAT_ESAVANT_MYSTERY_SHADOWCASTER)
|
||
|
+ GetHasFeat(FEAT_ESAVANT_MYSTERY_SHADOWSMITH)
|
||
|
+ GetHasFeat(FEAT_ESAVANT_NONE);
|
||
|
|
||
|
if(nElmSavant > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("An Elemental Savant may only advance a single arcane or shadowcasting 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 shadowcasting 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 nEnlightened = GetHasFeat(FEAT_ENLIGHTENEDFIST_INVOKING_WARLOCK)
|
||
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_INVOKING_DFA)
|
||
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_INVOKING_DRAGON_SHAMAN)
|
||
|
+ GetHasFeat(FEAT_ENLIGHTENEDFIST_NONE);
|
||
|
|
||
|
if(nEnlightened > 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(nEnlightened < 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 Iron Mind marker feats
|
||
|
int IronMindMarkerFeats()
|
||
|
{
|
||
|
if(GetLevelByClass(CLASS_TYPE_IRONMIND))
|
||
|
{
|
||
|
int nIronMind = GetHasFeat(FEAT_IRONMIND_MANIFEST_FOZ)
|
||
|
+ GetHasFeat(FEAT_IRONMIND_MANIFEST_PSION)
|
||
|
+ GetHasFeat(FEAT_IRONMIND_MANIFEST_PSYROUGE)
|
||
|
+ GetHasFeat(FEAT_IRONMIND_MANIFEST_PSYWAR)
|
||
|
+ GetHasFeat(FEAT_IRONMIND_MANIFEST_WARMIND)
|
||
|
+ GetHasFeat(FEAT_IRONMIND_MANIFEST_WILDER);
|
||
|
|
||
|
if(nIronMind > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("An Iron Mind may only advance a single psionic class.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if(nIronMind < 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("An Iron Mind must pick one psionic 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 Maester marker feats
|
||
|
int MaesterMarkerFeats()
|
||
|
{
|
||
|
if(GetLevelByClass(CLASS_TYPE_MAESTER))
|
||
|
{
|
||
|
int nMaester = GetHasFeat(FEAT_MAESTER_INVOKING_WARLOCK)
|
||
|
+ GetHasFeat(FEAT_MAESTER_INVOKING_DFA)
|
||
|
+ GetHasFeat(FEAT_MAESTER_NONE);
|
||
|
|
||
|
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 Master of Shadows marker feats
|
||
|
int MasterShadowMarkerFeats()
|
||
|
{
|
||
|
if(GetLevelByClass(CLASS_TYPE_MAGEKILLER))
|
||
|
{
|
||
|
int nShadow = GetHasFeat(FEAT_MASTERSHADOW_MYSTERY_SHADOWCASTER)
|
||
|
+ GetHasFeat(FEAT_MASTERSHADOW_MYSTERY_SHADOWSMITH);
|
||
|
|
||
|
if(nShadow > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Master of Shadows may only advance a single shadowcasting class.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if(nShadow < 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Master of Shadows must pick one shadowcasting 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 nMysticShadow = GetHasFeat(FEAT_MYSTICTHEURGE_MYSTERY_SHADOWCASTER)
|
||
|
+ GetHasFeat(FEAT_MYSTICTHEURGE_MYSTERY_SHADOWSMITH)
|
||
|
+ GetHasFeat(FEAT_MYSTICTHEURGE_NONE);
|
||
|
|
||
|
|
||
|
// Check if the character has chosen a valid combination of marker feats
|
||
|
if (nMysticShadow > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Mystic Theurge must choose or exclude shadowcasting at first level.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if (nMysticShadow < 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Mystic Theurge must choose or exclude shadowcasting 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 nNoctShadow = GetHasFeat(FEAT_NOCTUMANCER_MYSTERY_SHADOWCASTER)
|
||
|
+ GetHasFeat(FEAT_NOCTUMANCER_MYSTERY_SHADOWSMITH);
|
||
|
|
||
|
if(nNoctShadow > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Noctumancer may only advance a single shadowcasting class.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if(nNoctShadow < 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Noctumancer must pick one shadowcasting 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_NONE)
|
||
|
+ GetHasFeat(FEAT_OLLAM_MYSTERY_SHADOWCASTER)
|
||
|
+ GetHasFeat(FEAT_OLLAM_MYSTERY_SHADOWSMITH);
|
||
|
|
||
|
if(nOllam > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Ollam may only advance a single arcane or shadowcasting class.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if(nOllam < 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Ollam must pick one arcane or shadowcasting 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_MYSTERY_SHADOWCASTER)
|
||
|
+ GetHasFeat(FEAT_ORCUS_MYSTERY_SHADOWSMITH)
|
||
|
+ GetHasFeat(FEAT_ORCUS_NONE);
|
||
|
|
||
|
if(nOrcus > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Thrall of Orcus may only advance a single divine or shadowcasting 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 shadowcasting or divine 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_MANIFEST_FOZ)
|
||
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_MANIFEST_PSION)
|
||
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_MANIFEST_PSYROUGE)
|
||
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_MANIFEST_PSYWAR)
|
||
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_MANIFEST_WARMIND)
|
||
|
+ GetHasFeat(FEAT_PSYCHIC_THEURGE_MANIFEST_WILDER);
|
||
|
|
||
|
if(nPsyTheurgeDivine > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Psychic Theurge may only advance a single psionic class.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if(nPsyTheurgeDivine < 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Psychic Theurge must pick one psionic class to advance at first level.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
//:: Enforces Sancified Mind marker feats
|
||
|
int SanctifiedMindMarkerFeats()
|
||
|
{
|
||
|
if(GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND))
|
||
|
{
|
||
|
int nSanctMind = GetHasFeat(FEAT_SANCTIFIED_MIND_MANIFEST_FOZ)
|
||
|
+ GetHasFeat(FEAT_SANCTIFIED_MIND_MANIFEST_PSION)
|
||
|
+ GetHasFeat(FEAT_SANCTIFIED_MIND_MANIFEST_PSYROUGE)
|
||
|
+ GetHasFeat(FEAT_SANCTIFIED_MIND_MANIFEST_PSYWAR)
|
||
|
+ GetHasFeat(FEAT_SANCTIFIED_MIND_MANIFEST_WARMIND)
|
||
|
+ GetHasFeat(FEAT_SANCTIFIED_MIND_MANIFEST_WILDER)
|
||
|
+ GetHasFeat(FEAT_SANCTIFIED_MIND_MANIFEST_NONE);
|
||
|
|
||
|
if(nSanctMind > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Sancified Mind may only advance a single psionic class or their highest divine spellcasting class.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if(nSanctMind < 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Sancified Mind must pick a psionic class or divine spellcasting to advance at first level.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
//:: Enforces Shadow Mind marker feats
|
||
|
int ShadowMindMarkerFeats()
|
||
|
{
|
||
|
if(GetLevelByClass(CLASS_TYPE_SHADOWMIND))
|
||
|
{
|
||
|
int nShadowMind = GetHasFeat(FEAT_SHADOWMIND_MANIFEST_FOZ)
|
||
|
+ GetHasFeat(FEAT_SHADOWMIND_MANIFEST_PSION)
|
||
|
+ GetHasFeat(FEAT_SHADOWMIND_MANIFEST_PSYROUGE)
|
||
|
+ GetHasFeat(FEAT_SHADOWMIND_MANIFEST_PSYWAR)
|
||
|
+ GetHasFeat(FEAT_SHADOWMIND_MANIFEST_WARMIND)
|
||
|
+ GetHasFeat(FEAT_SHADOWMIND_MANIFEST_WILDER);
|
||
|
|
||
|
if(nShadowMind > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Shadow Mind may only advance a single psionic class.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if(nShadowMind < 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Shadow Mind must pick a psionic 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 nSoulcast = GetHasFeat(FEAT_SOULCASTER_MANIFEST_FOZ)
|
||
|
+ GetHasFeat(FEAT_SOULCASTER_MANIFEST_PSION)
|
||
|
+ GetHasFeat(FEAT_SOULCASTER_MANIFEST_PSYROUGE)
|
||
|
+ GetHasFeat(FEAT_SOULCASTER_MANIFEST_PSYWAR)
|
||
|
+ GetHasFeat(FEAT_SOULCASTER_MANIFEST_WARMIND)
|
||
|
+ GetHasFeat(FEAT_SOULCASTER_MANIFEST_WILDER)
|
||
|
+ GetHasFeat(FEAT_SOULCASTER_MANIFEST_NONE);
|
||
|
|
||
|
if(nSoulcast > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Soulcaster may only advance a single psionic class or their highest arcane spellcasting class.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if(nSoulcast < 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Soulcaster must pick a psionic class or arcane spellcasting to advance at first level.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
//:: Enforces Thrallherd marker feats
|
||
|
int ThrallherdMarkerFeats()
|
||
|
{
|
||
|
if(GetLevelByClass(CLASS_TYPE_THRALLHERD))
|
||
|
{
|
||
|
int nThrall = GetHasFeat(FEAT_THRALLHERD_MANIFEST_PSION);
|
||
|
|
||
|
if(nThrall > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Thrallherd may only advance a single psionic class.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if(nThrall < 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Thrallherd must pick a psionic 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_NONE)
|
||
|
+ GetHasFeat(FEAT_TIAMAT_INVOKING_WARLOCK)
|
||
|
+ GetHasFeat(FEAT_TIAMAT_INVOKING_DFA)
|
||
|
+ GetHasFeat(FEAT_TIAMAT_INVOKING_DRAGON_SHAMAN)
|
||
|
+ GetHasFeat(FEAT_TIAMAT_MYSTERY_SHADOWCASTER)
|
||
|
+ GetHasFeat(FEAT_TIAMAT_MYSTERY_SHADOWSMITH);
|
||
|
|
||
|
if(nTiamat > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Talon of Tiamat may only advance a single arcane, shadowcasting 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, shadowcasting or invoker 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_NONE)
|
||
|
+ GetHasFeat(FEAT_UNSEEN_INVOKING_WARLOCK)
|
||
|
+ GetHasFeat(FEAT_UNSEEN_INVOKING_DFA)
|
||
|
+ GetHasFeat(FEAT_UNSEEN_INVOKING_DRAGON_SHAMAN);
|
||
|
|
||
|
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_NONE)
|
||
|
+ GetHasFeat(FEAT_VIRTUOSO_INVOKING_WARLOCK)
|
||
|
+ GetHasFeat(FEAT_VIRTUOSO_INVOKING_DFA)
|
||
|
+ GetHasFeat(FEAT_VIRTUOSO_INVOKING_DRAGON_SHAMAN);
|
||
|
|
||
|
if(nVirtuoso > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Virtuoso may only advance a single arcane or invoker class.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if(nVirtuoso < 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Virtuoso 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 Wild Mage marker feats
|
||
|
int WildMageMarkerFeats()
|
||
|
{
|
||
|
if(GetLevelByClass(CLASS_TYPE_WILD_MAGE))
|
||
|
{
|
||
|
int nWildMage = GetHasFeat(FEAT_WILDMAGE_NONE)
|
||
|
+ GetHasFeat(FEAT_WILDMAGE_INVOKING_WARLOCK)
|
||
|
+ GetHasFeat(FEAT_WILDMAGE_INVOKING_DFA)
|
||
|
+ GetHasFeat(FEAT_WILDMAGE_INVOKING_DRAGON_SHAMAN);
|
||
|
|
||
|
if(nWildMage > 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("A Wild Mage may only advance a single arcane or invoker 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 or invoker class at first level.", OBJECT_SELF, FALSE);
|
||
|
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
CLASS_TYPE_THRALLHERD
|
||
|
*/
|
||
|
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
//:: If any of these conditions are true, relevel the character.
|
||
|
if(AbjurantChampionMarkerFeats()
|
||
|
|| AoTSMarkerFeats()
|
||
|
|| AlienistMarkerFeats()
|
||
|
|| AnimaMageMarkerFeats()
|
||
|
|| ArcaneTricksterMarkerFeats()
|
||
|
|| DoAMarkerFeats()
|
||
|
|| BloodMagusMarkerFeats()
|
||
|
|| CerebremancerMarkerFeats()
|
||
|
|| CoNMarkerFeats()
|
||
|
|| DiamondDragonMarkerFeats()
|
||
|
|| DragonsongLyristMarkerFeats()
|
||
|
|| EldritchDiscipleMarkerFeats()
|
||
|
|| ElementalSavantMarkerFeats()
|
||
|
|| EnlightendFistMarkerFeats()
|
||
|
|| IronMindMarkerFeats()
|
||
|
// || JudicatorMarkerFeats()
|
||
|
|| MaesterMarkerFeats()
|
||
|
|| MasterShadowMarkerFeats()
|
||
|
|| MysticTheurgeMarkerFeats()
|
||
|
|| NoctumancerMarkerFeats()
|
||
|
|| OllamMarkerFeats()
|
||
|
// || OozemasterMarkerFeats()
|
||
|
|| OrcusMarkerFeats()
|
||
|
|| PsychicTheurgeMarkerFeats()
|
||
|
|| SanctifiedMindMarkerFeats()
|
||
|
|| ShadowMindMarkerFeats()
|
||
|
|| SoulcasterMarkerFeats()
|
||
|
|| ThrallherdMarkerFeats()
|
||
|
|| TiamatMarkerFeats()
|
||
|
|| UnseenMarkerFeats()
|
||
|
|| VirtuosoMarkerFeats()
|
||
|
|| WildMageMarkerFeats())
|
||
|
{
|
||
|
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);
|
||
|
}
|
||
|
}
|