Revert "Revert "Major update""
This reverts commit 5de4086e8e5831b9b8f4b40a382ddfad1b1d84d8.
This commit is contained in:
parent
5de4086e8e
commit
525a4f8ccc
Binary file not shown.
@ -1,5 +1,41 @@
|
||||
Files changed for .35:
|
||||
Functions changed for .35:
|
||||
|
||||
inv_inc_invfunc.nss - GetHighestInvokerLevel(), GetFirstInvocationClassPosition(), GetPrimaryInvocationClass()
|
||||
inv_inc_invfunc.nss - GetHighestInvokerLevel(), GetFirstInvocationClassPosition(), GetPrimaryInvocationClass()
|
||||
|
||||
inc_epicspellfnc.nss - GetCanLearnSeed()
|
||||
|
||||
inc_newspellbook.nss - CheckNewSpellbooks(), GetSpellslotLevel()
|
||||
|
||||
moi_inc_moifunc.nss - GetHighestMeldshaperLevel(), GetPrimaryIncarnumClass(), GetFirstIncarnumClassPosition()
|
||||
|
||||
nw_o2_coninclude.nss - nDetermineClassToUse()
|
||||
|
||||
prc_inc_castlvl.nss - GetArcanePRCLevels(), GetDivinePRCLevels(), GetFirstArcaneClassPosition(), GetFirstDivineClassPosition(), GetPrimaryArcaneClass(), GetPrimaryDivineClass(), GetPrimarySpellcastingClass(), UrPriestCL(), GetLevelByTypeArcane(), GetLevelByTypeDivine(), [Needs marker feats]
|
||||
|
||||
prc_inc_clsfunc.nss - [Needs marker feats]
|
||||
|
||||
prc_inc_core.nss - PRCGetSpellLevel(), UseNewSpellBook(), PRCGetHasSpell(), PRCGetIsRealSpellKnown()
|
||||
|
||||
prc_inc_domain.nss - CastDomainSpell()
|
||||
|
||||
prc_inc_function.nss - SetupCharacterData(), [Needs marker feats]
|
||||
|
||||
prc_inc_itmrstr.nss - _prc_inc_itmrstr_ApplyWizardry()
|
||||
|
||||
prc_inc_leadersh.nss - StoreCohort()
|
||||
|
||||
prc_inc_spells.nss - GetPrCAdjustedCasterLevelByType(), GetLevelByTypeArcaneFeats(), GetLevelByTypeDivineFeats(), PRCDecrementRemainingSpellUses(), PRCGetSpellUsesLeft()
|
||||
|
||||
prc_shifter_info.nss - _prc_inc_PrintDebugItem(), _prc_inc_PrintShape()
|
||||
|
||||
psi_inc_core.nss - GetHighestManifesterLevel(), GetPrimaryPsionicClass(), GetFirstPsionicClassPosition()
|
||||
|
||||
shd_inc_shdfunc.nss - GetHighestShadowcasterLevel(), GetPrimaryShadowMagicClass(), GetFirstShadowMagicClassPosition()
|
||||
|
||||
tob_inc_recovery.nss - RecoverPrCAbilities()
|
||||
|
||||
tob_inc_tobfunc.nss - GetHighestInitiatorLevel(), GetPrimaryBladeMagicClass(), GetFirstBladeMagicClassPosition()
|
||||
|
||||
true_inc_trufunc.nss - GetHighestTrueSpeakerLevel()
|
||||
|
||||
|
||||
|
@ -1,4 +1,6 @@
|
||||
|
||||
//:: Updated for .35 by Jaysyn 2023/03/10
|
||||
|
||||
int GetFeatForSeed(int nSeedID);
|
||||
int GetIPForSeed(int nSeedID);
|
||||
int GetDCForSeed(int nSeedID);
|
||||
@ -25,6 +27,8 @@ int GetSpellFromAbrev(string sAbrev);
|
||||
/* Includes */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#include "inc_utility"
|
||||
//#include "inc_epicspelldef"
|
||||
|
||||
|
@ -349,7 +349,7 @@ int GetSpellslotLevel(int nClass, object oPC)
|
||||
int nArcSpellslotLevel;
|
||||
int nDivSpellslotLevel;
|
||||
int i;
|
||||
for(i = 1; i <= 3; i++)
|
||||
for(i = 1; i <= 8; i++)
|
||||
{
|
||||
int nTempClass = GetClassByPosition(i, oPC);
|
||||
//spellcasting prc
|
||||
@ -832,7 +832,7 @@ void CheckNewSpellbooks(object oPC)
|
||||
{
|
||||
WipeSpellbookHideFeats(oPC);
|
||||
int i;
|
||||
for(i = 1; i <= 3; i++)
|
||||
for(i = 1; i <= 8; i++)
|
||||
{
|
||||
int nClass = GetClassByPosition(i, oPC);
|
||||
int nLevel = GetLevelByClass(nClass, oPC);
|
||||
|
@ -1,6 +1,6 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Invocation include: Miscellaneous
|
||||
//:: tob_inc_tobfunc
|
||||
//:: inv_inc_invfunc
|
||||
//::///////////////////////////////////////////////
|
||||
/** @file
|
||||
Defines various functions and other stuff that
|
||||
@ -12,6 +12,8 @@
|
||||
|
||||
@author Fox
|
||||
@date Created - 2008.1.25
|
||||
|
||||
Updated for .35 by Jaysyn 2023/03/10
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
@ -12,10 +12,15 @@
|
||||
|
||||
@author Stratovarius
|
||||
@date Created - 2019.12.28
|
||||
|
||||
Updated for .35 by Jaysyn 2023/03/10
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
//:: Test Void
|
||||
//void main () {}
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Function prototypes */
|
||||
//////////////////////////////////////////////////
|
||||
@ -203,13 +208,35 @@ int GetIncarnumLevelForClass(int nSpecificClass, object oMeldshaper)
|
||||
}
|
||||
|
||||
int GetHighestMeldshaperLevel(object oMeldshaper)
|
||||
{
|
||||
int n = 0;
|
||||
int nHighest;
|
||||
int nTemp;
|
||||
|
||||
while(n <= 8)
|
||||
{
|
||||
if(GetClassByPosition(n, oMeldshaper) != CLASS_TYPE_INVALID)
|
||||
{
|
||||
nTemp = GetMeldshaperLevel(oMeldshaper, GetClassByPosition(n, oMeldshaper), -1);
|
||||
|
||||
if(nTemp > nHighest)
|
||||
nHighest = nTemp;
|
||||
}
|
||||
n++;
|
||||
|
||||
}
|
||||
|
||||
return nHighest;
|
||||
}
|
||||
|
||||
/* int GetHighestMeldshaperLevel(object oMeldshaper)
|
||||
{
|
||||
return max(max(GetClassByPosition(1, oMeldshaper) != CLASS_TYPE_INVALID ? GetMeldshaperLevel(oMeldshaper, GetClassByPosition(1, oMeldshaper), -1) : 0,
|
||||
GetClassByPosition(2, oMeldshaper) != CLASS_TYPE_INVALID ? GetMeldshaperLevel(oMeldshaper, GetClassByPosition(2, oMeldshaper), -1) : 0
|
||||
),
|
||||
GetClassByPosition(3, oMeldshaper) != CLASS_TYPE_INVALID ? GetMeldshaperLevel(oMeldshaper, GetClassByPosition(3, oMeldshaper), -1) : 0
|
||||
);
|
||||
}
|
||||
} */
|
||||
|
||||
int GetIsIncarnumClass(int nClass)
|
||||
{
|
||||
@ -260,18 +287,30 @@ int GetPrimaryIncarnumClass(object oMeldshaper = OBJECT_SELF)
|
||||
else
|
||||
{
|
||||
int nClassLvl;
|
||||
int nClass1, nClass2, nClass3;
|
||||
int nClass1Lvl, nClass2Lvl, nClass3Lvl;
|
||||
int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8;
|
||||
int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl;
|
||||
|
||||
nClass1 = GetClassByPosition(1, oMeldshaper);
|
||||
nClass1 = GetClassByPosition(1, oMeldshaper);
|
||||
nClass2 = GetClassByPosition(2, oMeldshaper);
|
||||
nClass3 = GetClassByPosition(3, oMeldshaper);
|
||||
nClass4 = GetClassByPosition(4, oMeldshaper);
|
||||
nClass5 = GetClassByPosition(5, oMeldshaper);
|
||||
nClass6 = GetClassByPosition(6, oMeldshaper);
|
||||
nClass7 = GetClassByPosition(7, oMeldshaper);
|
||||
nClass8 = GetClassByPosition(8, oMeldshaper);
|
||||
|
||||
if(GetIsIncarnumClass(nClass1)) nClass1Lvl = GetLevelByClass(nClass1, oMeldshaper);
|
||||
if(GetIsIncarnumClass(nClass2)) nClass2Lvl = GetLevelByClass(nClass2, oMeldshaper);
|
||||
if(GetIsIncarnumClass(nClass3)) nClass3Lvl = GetLevelByClass(nClass3, oMeldshaper);
|
||||
if(GetIsIncarnumClass(nClass4)) nClass4Lvl = GetLevelByClass(nClass4, oMeldshaper);
|
||||
if(GetIsIncarnumClass(nClass5)) nClass5Lvl = GetLevelByClass(nClass5, oMeldshaper);
|
||||
if(GetIsIncarnumClass(nClass6)) nClass6Lvl = GetLevelByClass(nClass6, oMeldshaper);
|
||||
if(GetIsIncarnumClass(nClass7)) nClass7Lvl = GetLevelByClass(nClass7, oMeldshaper);
|
||||
if(GetIsIncarnumClass(nClass8)) nClass8Lvl = GetLevelByClass(nClass8, oMeldshaper);
|
||||
|
||||
nClass = nClass1;
|
||||
nClassLvl = nClass1Lvl;
|
||||
|
||||
if(nClass2Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass2;
|
||||
@ -282,6 +321,32 @@ int GetPrimaryIncarnumClass(object oMeldshaper = OBJECT_SELF)
|
||||
nClass = nClass3;
|
||||
nClassLvl = nClass3Lvl;
|
||||
}
|
||||
if(nClass4Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass4;
|
||||
nClassLvl = nClass4Lvl;
|
||||
}
|
||||
if(nClass5Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass5;
|
||||
nClassLvl = nClass5Lvl;
|
||||
}
|
||||
if(nClass6Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass6;
|
||||
nClassLvl = nClass6Lvl;
|
||||
}
|
||||
if(nClass7Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass7;
|
||||
nClassLvl = nClass7Lvl;
|
||||
}
|
||||
if(nClass8Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass8;
|
||||
nClassLvl = nClass8Lvl;
|
||||
}
|
||||
|
||||
if(nClassLvl == 0)
|
||||
nClass = CLASS_TYPE_INVALID;
|
||||
}
|
||||
@ -297,6 +362,16 @@ int GetFirstIncarnumClassPosition(object oMeldshaper = OBJECT_SELF)
|
||||
return 2;
|
||||
if (GetIsIncarnumClass(GetClassByPosition(3, oMeldshaper)))
|
||||
return 3;
|
||||
if (GetIsIncarnumClass(GetClassByPosition(4, oMeldshaper)))
|
||||
return 4;
|
||||
if (GetIsIncarnumClass(GetClassByPosition(5, oMeldshaper)))
|
||||
return 5;
|
||||
if (GetIsIncarnumClass(GetClassByPosition(6, oMeldshaper)))
|
||||
return 6;
|
||||
if (GetIsIncarnumClass(GetClassByPosition(7, oMeldshaper)))
|
||||
return 7;
|
||||
if (GetIsIncarnumClass(GetClassByPosition(8, oMeldshaper)))
|
||||
return 8;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -11,6 +11,8 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Brent, Andrew
|
||||
//:: Created On: November - May
|
||||
//::
|
||||
//:: Updated for .35 by Jaysyn 2023/03/10
|
||||
//:://////////////////////////////////////////////
|
||||
// :: MODS
|
||||
// April 23 2002: Removed animal parts. They were silly.
|
||||
@ -4703,11 +4705,22 @@ int nDetermineClassToUse(object oCharacter)
|
||||
int nClass1 = GetClassByPosition(1, oCharacter);
|
||||
int nClass2 = GetClassByPosition(2, oCharacter);
|
||||
int nClass3 = GetClassByPosition(3, oCharacter);
|
||||
int nClass4 = GetClassByPosition(4, oCharacter);
|
||||
int nClass5 = GetClassByPosition(5, oCharacter);
|
||||
int nClass6 = GetClassByPosition(6, oCharacter);
|
||||
int nClass7 = GetClassByPosition(7, oCharacter);
|
||||
int nClass8 = GetClassByPosition(8, oCharacter);
|
||||
|
||||
int nState1 = GetLevelByClass(nClass1, oCharacter) * 100 / nTotal;
|
||||
int nState2 = GetLevelByClass(nClass2, oCharacter) * 100 / nTotal + nState1;
|
||||
// nState3 will always be 100 if there is a third class, or 0 if there isn't
|
||||
//int nState3 = GetLevelByClass(nClass3, oCharacter) * 100 / nTotal + nState2;
|
||||
int nState3 = GetLevelByClass(nClass3, oCharacter) * 100 / nTotal + nState2;
|
||||
int nState4 = GetLevelByClass(nClass4, oCharacter) * 100 / nTotal + nState3;
|
||||
int nState5 = GetLevelByClass(nClass5, oCharacter) * 100 / nTotal + nState4;
|
||||
int nState6 = GetLevelByClass(nClass6, oCharacter) * 100 / nTotal + nState5;
|
||||
int nState7 = GetLevelByClass(nClass7, oCharacter) * 100 / nTotal + nState6;
|
||||
|
||||
// nState8 will always be 100 if there is an eigth class, or 0 if there isn't
|
||||
//int nState8 = GetLevelByClass(nClass3, oCharacter) * 100 / nTotal + nState7;
|
||||
|
||||
// correct for unrecognized classes - assumes the first class will be a non-prestige player class
|
||||
if(nClass2 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass2))
|
||||
@ -4718,8 +4731,33 @@ int nDetermineClassToUse(object oCharacter)
|
||||
if(nClass3 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass3))
|
||||
{
|
||||
nClass3 = CLASS_TYPE_INVALID;
|
||||
if(nClass2 != CLASS_TYPE_INVALID)
|
||||
nState2 = 100;
|
||||
nState1 = nState3;
|
||||
}
|
||||
if(nClass4 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass4))
|
||||
{
|
||||
nClass4 = CLASS_TYPE_INVALID;
|
||||
nState1 = nState4;
|
||||
}
|
||||
if(nClass5 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass5))
|
||||
{
|
||||
nClass5 = CLASS_TYPE_INVALID;
|
||||
nState1 = nState5;
|
||||
}
|
||||
if(nClass6 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass6))
|
||||
{
|
||||
nClass6 = CLASS_TYPE_INVALID;
|
||||
nState1 = nState6;
|
||||
}
|
||||
if(nClass7 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass7))
|
||||
{
|
||||
nClass7 = CLASS_TYPE_INVALID;
|
||||
nState1 = nState7;
|
||||
}
|
||||
if(nClass8 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass8))
|
||||
{
|
||||
nClass8 = CLASS_TYPE_INVALID;
|
||||
if(nClass7 != CLASS_TYPE_INVALID)
|
||||
nState7 = 100;
|
||||
else nState1 = 100;
|
||||
}
|
||||
|
||||
@ -4748,4 +4786,6 @@ int nDetermineClassToUse(object oCharacter)
|
||||
return nClass;
|
||||
}
|
||||
|
||||
//:: Test Void
|
||||
//void main () {}
|
||||
|
||||
|
@ -8,6 +8,8 @@
|
||||
* functions. If this ends up like prc_inc_spells, you get slapped.
|
||||
*/
|
||||
|
||||
//:: Updated for .35 by Jaysyn 2023/03/10
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Function prototypes */
|
||||
//////////////////////////////////////////////////
|
||||
@ -785,12 +787,18 @@ int GetIsDivineClass(int nClass, object oCaster = OBJECT_SELF)
|
||||
|
||||
int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
||||
{
|
||||
int nArcane;
|
||||
int nOozeMLevel = GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
|
||||
int nUM = GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
|
||||
int nFirstClass = GetClassByPosition(1, oCaster);
|
||||
int nSecondClass = GetClassByPosition(2, oCaster);
|
||||
int nThirdClass = GetClassByPosition(3, oCaster);
|
||||
int nArcane;
|
||||
int nOozeMLevel = GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
|
||||
int nUM = GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
|
||||
|
||||
int nFirstClass = GetClassByPosition(1, oCaster);
|
||||
int nSecondClass = GetClassByPosition(2, oCaster);
|
||||
int nThirdClass = GetClassByPosition(3, oCaster);
|
||||
int nFourthClass = GetClassByPosition(4, oCaster);
|
||||
int nFifthClass = GetClassByPosition(5, oCaster);
|
||||
int nSixthClass = GetClassByPosition(6, oCaster);
|
||||
int nSeventhClass = GetClassByPosition(7, oCaster);
|
||||
int nEightClass = GetClassByPosition(8, oCaster);
|
||||
|
||||
if (GetFirstArcaneClassPosition(oCaster)) nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
|
||||
|
||||
@ -834,7 +842,7 @@ int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
||||
+ (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
|
||||
+ (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
|
||||
|
||||
int nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);
|
||||
if (nClass)
|
||||
@ -857,7 +865,7 @@ int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
||||
* first class slot is NOT divine AND second class slot is arcane OR
|
||||
* first AND second class slot is NOT divine AND 3rd class slot is arcane
|
||||
*/
|
||||
if (nOozeMLevel)
|
||||
if (nOozeMLevel) //:: [PRC .35] This needs marker feats.
|
||||
{
|
||||
if (GetIsArcaneClass(nFirstClass, oCaster)
|
||||
|| (!GetIsDivineClass(nFirstClass, oCaster)
|
||||
@ -922,9 +930,15 @@ int GetDivinePRCLevels(object oCaster)
|
||||
{
|
||||
int nDivine;
|
||||
int nOozeMLevel = GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
|
||||
int nFirstClass = GetClassByPosition(1, oCaster);
|
||||
int nSecondClass = GetClassByPosition(2, oCaster);
|
||||
int nThirdClass = GetClassByPosition(3, oCaster);
|
||||
|
||||
int nFirstClass = GetClassByPosition(1, oCaster);
|
||||
int nSecondClass = GetClassByPosition(2, oCaster);
|
||||
int nThirdClass = GetClassByPosition(3, oCaster);
|
||||
int nFourthClass = GetClassByPosition(4, oCaster);
|
||||
int nFifthClass = GetClassByPosition(5, oCaster);
|
||||
int nSixthClass = GetClassByPosition(6, oCaster);
|
||||
int nSeventhClass = GetClassByPosition(7, oCaster);
|
||||
int nEightClass = GetClassByPosition(8, oCaster);
|
||||
|
||||
// This section accounts for full progression classes
|
||||
nDivine += GetLevelByClass(CLASS_TYPE_ARCANE_HIEROPHANT, oCaster)
|
||||
@ -967,7 +981,7 @@ int GetDivinePRCLevels(object oCaster)
|
||||
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
|
||||
}
|
||||
|
||||
if (nOozeMLevel)
|
||||
if (nOozeMLevel) //:: [PRC .35] This needs marker feats.
|
||||
{
|
||||
if (GetIsDivineClass(nFirstClass, oCaster)
|
||||
|| (!GetIsArcaneClass(nFirstClass, oCaster)
|
||||
@ -984,7 +998,7 @@ int GetDivinePRCLevels(object oCaster)
|
||||
int GetFirstArcaneClassPosition(object oCaster = OBJECT_SELF)
|
||||
{
|
||||
int i;
|
||||
for(i = 1; i < 4; i++)
|
||||
for(i = 1; i < 9; i++)
|
||||
{
|
||||
if(GetIsArcaneClass(GetClassByPosition(i, oCaster), oCaster))
|
||||
return i;
|
||||
@ -996,7 +1010,7 @@ int GetFirstArcaneClassPosition(object oCaster = OBJECT_SELF)
|
||||
int GetFirstDivineClassPosition(object oCaster = OBJECT_SELF)
|
||||
{
|
||||
int i;
|
||||
for(i = 1; i < 4; i++)
|
||||
for(i = 1; i < 9; i++)
|
||||
{
|
||||
if(GetIsDivineClass(GetClassByPosition(i, oCaster), oCaster))
|
||||
return i;
|
||||
@ -1019,7 +1033,7 @@ int GetPrimaryArcaneClass(object oCaster = OBJECT_SELF)
|
||||
else
|
||||
{
|
||||
int i, nClassTmp, nClassLvl;
|
||||
for(i = 1; i < 4; i++)
|
||||
for(i = 1; i < 9; i++)
|
||||
{
|
||||
nClassTmp = GetClassByPosition(i, oCaster);
|
||||
if(GetIsArcaneClass(nClassTmp, oCaster) && nClassTmp != CLASS_TYPE_SUBLIME_CHORD)
|
||||
@ -1063,7 +1077,7 @@ int GetPrimaryDivineClass(object oCaster = OBJECT_SELF)
|
||||
else
|
||||
{
|
||||
int i, nClassTmp, nClassLvl;
|
||||
for(i = 1; i < 4; i++)
|
||||
for(i = 1; i < 9; i++)
|
||||
{
|
||||
nClassTmp = GetClassByPosition(i, oCaster);
|
||||
if(GetIsDivineClass(nClassTmp, oCaster))
|
||||
@ -1088,7 +1102,7 @@ int GetPrimarySpellcastingClass(object oCaster = OBJECT_SELF)
|
||||
int nClass;
|
||||
|
||||
int i, nClassTmp, nClassLvl;
|
||||
for(i = 1; i < 4; i++)
|
||||
for(i = 1; i < 9; i++)
|
||||
{
|
||||
nClassTmp = GetClassByPosition(i, oCaster);
|
||||
if(GetIsArcaneClass(nClassTmp, oCaster)
|
||||
@ -1121,40 +1135,40 @@ int PracticedSpellcasting(object oCaster, int iCastingClass, int iCastingLevels)
|
||||
|
||||
switch(iCastingClass)
|
||||
{
|
||||
case CLASS_TYPE_BARD: nFeat = FEAT_PRACTICED_SPELLCASTER_BARD; break;
|
||||
case CLASS_TYPE_SORCERER: nFeat = FEAT_PRACTICED_SPELLCASTER_SORCERER; break;
|
||||
case CLASS_TYPE_WIZARD: nFeat = FEAT_PRACTICED_SPELLCASTER_WIZARD; break;
|
||||
case CLASS_TYPE_CLERIC: nFeat = FEAT_PRACTICED_SPELLCASTER_CLERIC; break;
|
||||
case CLASS_TYPE_DRUID: nFeat = FEAT_PRACTICED_SPELLCASTER_DRUID; break;
|
||||
case CLASS_TYPE_PALADIN: nFeat = FEAT_PRACTICED_SPELLCASTER_PALADIN; break;
|
||||
case CLASS_TYPE_RANGER: nFeat = FEAT_PRACTICED_SPELLCASTER_RANGER; break;
|
||||
case CLASS_TYPE_ASSASSIN: nFeat = FEAT_PRACTICED_SPELLCASTER_ASSASSIN; break;
|
||||
case CLASS_TYPE_BLACKGUARD: nFeat = FEAT_PRACTICED_SPELLCASTER_BLACKGUARD; break;
|
||||
case CLASS_TYPE_OCULAR: nFeat = FEAT_PRACTICED_SPELLCASTER_OCULAR; break;
|
||||
case CLASS_TYPE_HEXBLADE: nFeat = FEAT_PRACTICED_SPELLCASTER_HEXBLADE; break;
|
||||
case CLASS_TYPE_DUSKBLADE: nFeat = FEAT_PRACTICED_SPELLCASTER_DUSKBLADE; break;
|
||||
case CLASS_TYPE_HEALER: nFeat = FEAT_PRACTICED_SPELLCASTER_HEALER; break;
|
||||
case CLASS_TYPE_KNIGHT_CHALICE: nFeat = FEAT_PRACTICED_SPELLCASTER_KNIGHT_CHALICE; break;
|
||||
case CLASS_TYPE_NENTYAR_HUNTER: nFeat = FEAT_PRACTICED_SPELLCASTER_NENTYAR; break;
|
||||
case CLASS_TYPE_VASSAL: nFeat = FEAT_PRACTICED_SPELLCASTER_VASSAL; break;
|
||||
case CLASS_TYPE_UR_PRIEST: nFeat = FEAT_PRACTICED_SPELLCASTER_UR_PRIEST; break;
|
||||
case CLASS_TYPE_SOLDIER_OF_LIGHT: nFeat = FEAT_PRACTICED_SPELLCASTER_SOLDIER_OF_LIGHT; break;
|
||||
case CLASS_TYPE_SHADOWLORD: nFeat = FEAT_PRACTICED_SPELLCASTER_SHADOWLORD; break;
|
||||
case CLASS_TYPE_JUSTICEWW: nFeat = FEAT_PRACTICED_SPELLCASTER_JUSTICEWW; break;
|
||||
case CLASS_TYPE_KNIGHT_MIDDLECIRCLE: nFeat = FEAT_PRACTICED_SPELLCASTER_KNIGHT_MIDDLECIRCLE; break;
|
||||
case CLASS_TYPE_SHAMAN: nFeat = FEAT_PRACTICED_SPELLCASTER_SHAMAN; break;
|
||||
case CLASS_TYPE_SLAYER_OF_DOMIEL: nFeat = FEAT_PRACTICED_SPELLCASTER_SLAYER_OF_DOMIEL; break;
|
||||
case CLASS_TYPE_SUEL_ARCHANAMACH: nFeat = FEAT_PRACTICED_SPELLCASTER_SUEL_ARCHANAMACH; break;
|
||||
case CLASS_TYPE_FAVOURED_SOUL: nFeat = FEAT_PRACTICED_SPELLCASTER_FAVOURED_SOUL; break;
|
||||
case CLASS_TYPE_SOHEI: nFeat = FEAT_PRACTICED_SPELLCASTER_SOHEI; break;
|
||||
case CLASS_TYPE_CELEBRANT_SHARESS: nFeat = FEAT_PRACTICED_SPELLCASTER_CELEBRANT_SHARESS; break;
|
||||
case CLASS_TYPE_WARMAGE: nFeat = FEAT_PRACTICED_SPELLCASTER_WARMAGE; break;
|
||||
case CLASS_TYPE_DREAD_NECROMANCER: nFeat = FEAT_PRACTICED_SPELLCASTER_DREAD_NECROMANCER; break;
|
||||
case CLASS_TYPE_CULTIST_SHATTERED_PEAK: nFeat = FEAT_PRACTICED_SPELLCASTER_CULTIST; break;
|
||||
case CLASS_TYPE_ARCHIVIST: nFeat = FEAT_PRACTICED_SPELLCASTER_ARCHIVIST; break;
|
||||
case CLASS_TYPE_BEGUILER: nFeat = FEAT_PRACTICED_SPELLCASTER_BEGUILER; break;
|
||||
case CLASS_TYPE_BLIGHTER: nFeat = FEAT_PRACTICED_SPELLCASTER_BLIGHTER; break;
|
||||
case CLASS_TYPE_HARPER: nFeat = FEAT_PRACTICED_SPELLCASTER_HARPER; break;
|
||||
case CLASS_TYPE_BARD: nFeat = FEAT_PRACTICED_SPELLCASTER_BARD; break;
|
||||
case CLASS_TYPE_SORCERER: nFeat = FEAT_PRACTICED_SPELLCASTER_SORCERER; break;
|
||||
case CLASS_TYPE_WIZARD: nFeat = FEAT_PRACTICED_SPELLCASTER_WIZARD; break;
|
||||
case CLASS_TYPE_CLERIC: nFeat = FEAT_PRACTICED_SPELLCASTER_CLERIC; break;
|
||||
case CLASS_TYPE_DRUID: nFeat = FEAT_PRACTICED_SPELLCASTER_DRUID; break;
|
||||
case CLASS_TYPE_PALADIN: nFeat = FEAT_PRACTICED_SPELLCASTER_PALADIN; break;
|
||||
case CLASS_TYPE_RANGER: nFeat = FEAT_PRACTICED_SPELLCASTER_RANGER; break;
|
||||
case CLASS_TYPE_ASSASSIN: nFeat = FEAT_PRACTICED_SPELLCASTER_ASSASSIN; break;
|
||||
case CLASS_TYPE_BLACKGUARD: nFeat = FEAT_PRACTICED_SPELLCASTER_BLACKGUARD; break;
|
||||
case CLASS_TYPE_OCULAR: nFeat = FEAT_PRACTICED_SPELLCASTER_OCULAR; break;
|
||||
case CLASS_TYPE_HEXBLADE: nFeat = FEAT_PRACTICED_SPELLCASTER_HEXBLADE; break;
|
||||
case CLASS_TYPE_DUSKBLADE: nFeat = FEAT_PRACTICED_SPELLCASTER_DUSKBLADE; break;
|
||||
case CLASS_TYPE_HEALER: nFeat = FEAT_PRACTICED_SPELLCASTER_HEALER; break;
|
||||
case CLASS_TYPE_KNIGHT_CHALICE: nFeat = FEAT_PRACTICED_SPELLCASTER_KNIGHT_CHALICE; break;
|
||||
case CLASS_TYPE_NENTYAR_HUNTER: nFeat = FEAT_PRACTICED_SPELLCASTER_NENTYAR; break;
|
||||
case CLASS_TYPE_VASSAL: nFeat = FEAT_PRACTICED_SPELLCASTER_VASSAL; break;
|
||||
case CLASS_TYPE_UR_PRIEST: nFeat = FEAT_PRACTICED_SPELLCASTER_UR_PRIEST; break;
|
||||
case CLASS_TYPE_SOLDIER_OF_LIGHT: nFeat = FEAT_PRACTICED_SPELLCASTER_SOLDIER_OF_LIGHT; break;
|
||||
case CLASS_TYPE_SHADOWLORD: nFeat = FEAT_PRACTICED_SPELLCASTER_SHADOWLORD; break;
|
||||
case CLASS_TYPE_JUSTICEWW: nFeat = FEAT_PRACTICED_SPELLCASTER_JUSTICEWW; break;
|
||||
case CLASS_TYPE_KNIGHT_MIDDLECIRCLE: nFeat = FEAT_PRACTICED_SPELLCASTER_KNIGHT_MIDDLECIRCLE; break;
|
||||
case CLASS_TYPE_SHAMAN: nFeat = FEAT_PRACTICED_SPELLCASTER_SHAMAN; break;
|
||||
case CLASS_TYPE_SLAYER_OF_DOMIEL: nFeat = FEAT_PRACTICED_SPELLCASTER_SLAYER_OF_DOMIEL; break;
|
||||
case CLASS_TYPE_SUEL_ARCHANAMACH: nFeat = FEAT_PRACTICED_SPELLCASTER_SUEL_ARCHANAMACH; break;
|
||||
case CLASS_TYPE_FAVOURED_SOUL: nFeat = FEAT_PRACTICED_SPELLCASTER_FAVOURED_SOUL; break;
|
||||
case CLASS_TYPE_SOHEI: nFeat = FEAT_PRACTICED_SPELLCASTER_SOHEI; break;
|
||||
case CLASS_TYPE_CELEBRANT_SHARESS: nFeat = FEAT_PRACTICED_SPELLCASTER_CELEBRANT_SHARESS; break;
|
||||
case CLASS_TYPE_WARMAGE: nFeat = FEAT_PRACTICED_SPELLCASTER_WARMAGE; break;
|
||||
case CLASS_TYPE_DREAD_NECROMANCER: nFeat = FEAT_PRACTICED_SPELLCASTER_DREAD_NECROMANCER; break;
|
||||
case CLASS_TYPE_CULTIST_SHATTERED_PEAK: nFeat = FEAT_PRACTICED_SPELLCASTER_CULTIST; break;
|
||||
case CLASS_TYPE_ARCHIVIST: nFeat = FEAT_PRACTICED_SPELLCASTER_ARCHIVIST; break;
|
||||
case CLASS_TYPE_BEGUILER: nFeat = FEAT_PRACTICED_SPELLCASTER_BEGUILER; break;
|
||||
case CLASS_TYPE_BLIGHTER: nFeat = FEAT_PRACTICED_SPELLCASTER_BLIGHTER; break;
|
||||
case CLASS_TYPE_HARPER: nFeat = FEAT_PRACTICED_SPELLCASTER_HARPER; break;
|
||||
default: return 0;
|
||||
}
|
||||
|
||||
@ -1512,9 +1526,20 @@ int UrPriestCL(object oCaster, int nCastingClass)
|
||||
int iClass1 = GetClassByPosition(1, oCaster);
|
||||
int iClass2 = GetClassByPosition(2, oCaster);
|
||||
int iClass3 = GetClassByPosition(3, oCaster);
|
||||
int iClass4 = GetClassByPosition(4, oCaster);
|
||||
int iClass5 = GetClassByPosition(5, oCaster);
|
||||
int iClass6 = GetClassByPosition(6, oCaster);
|
||||
int iClass7 = GetClassByPosition(7, oCaster);
|
||||
int iClass8 = GetClassByPosition(8, oCaster);
|
||||
|
||||
int iClass1Lev = GetLevelByPosition(1, oCaster);
|
||||
int iClass2Lev = GetLevelByPosition(2, oCaster);
|
||||
int iClass3Lev = GetLevelByPosition(3, oCaster);
|
||||
int iClass4Lev = GetLevelByPosition(4, oCaster);
|
||||
int iClass5Lev = GetLevelByPosition(5, oCaster);
|
||||
int iClass6Lev = GetLevelByPosition(6, oCaster);
|
||||
int iClass7Lev = GetLevelByPosition(7, oCaster);
|
||||
int iClass8Lev = GetLevelByPosition(8, oCaster);
|
||||
|
||||
/*if (iClass1 == CLASS_TYPE_PALADIN || iClass1 == CLASS_TYPE_RANGER) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
|
||||
if (iClass2 == CLASS_TYPE_PALADIN || iClass2 == CLASS_TYPE_RANGER) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
|
||||
@ -1536,31 +1561,72 @@ int UrPriestCL(object oCaster, int nCastingClass)
|
||||
if (DEBUG) DoDebug("UrPriestCL Divine - iClass1Lev "+IntToString(iClass1Lev)+" iClass2Lev "+IntToString(iClass2Lev)+" iClass3Lev "+IntToString(iClass3Lev));*/
|
||||
|
||||
int iFirstArcane = GetPrimaryArcaneClass(oCaster);
|
||||
iClass1 = GetClassByPosition(1, oCaster);
|
||||
iClass2 = GetClassByPosition(2, oCaster);
|
||||
iClass3 = GetClassByPosition(3, oCaster);
|
||||
iClass1Lev = GetLevelByPosition(1, oCaster);
|
||||
iClass2Lev = GetLevelByPosition(2, oCaster);
|
||||
iClass3Lev = GetLevelByPosition(3, oCaster);
|
||||
iClass1 = GetClassByPosition(1, oCaster);
|
||||
iClass2 = GetClassByPosition(2, oCaster);
|
||||
iClass3 = GetClassByPosition(3, oCaster);
|
||||
iClass4 = GetClassByPosition(4, oCaster);
|
||||
iClass5 = GetClassByPosition(5, oCaster);
|
||||
iClass6 = GetClassByPosition(6, oCaster);
|
||||
iClass7 = GetClassByPosition(7, oCaster);
|
||||
iClass8 = GetClassByPosition(8, oCaster);
|
||||
|
||||
iClass1Lev = GetLevelByPosition(1, oCaster);
|
||||
iClass2Lev = GetLevelByPosition(2, oCaster);
|
||||
iClass3Lev = GetLevelByPosition(3, oCaster);
|
||||
iClass4Lev = GetLevelByPosition(4, oCaster);
|
||||
iClass5Lev = GetLevelByPosition(5, oCaster);
|
||||
iClass6Lev = GetLevelByPosition(6, oCaster);
|
||||
iClass7Lev = GetLevelByPosition(7, oCaster);
|
||||
iClass8Lev = GetLevelByPosition(8, oCaster);
|
||||
|
||||
if (iClass1 == CLASS_TYPE_HEXBLADE) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
|
||||
if (iClass2 == CLASS_TYPE_HEXBLADE) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
|
||||
if (iClass3 == CLASS_TYPE_HEXBLADE) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0;
|
||||
if (iClass4 == CLASS_TYPE_HEXBLADE) iClass4Lev = (iClass4Lev >= 4) ? (iClass4Lev / 2) : 0;
|
||||
if (iClass5 == CLASS_TYPE_HEXBLADE) iClass5Lev = (iClass5Lev >= 4) ? (iClass5Lev / 2) : 0;
|
||||
if (iClass6 == CLASS_TYPE_HEXBLADE) iClass6Lev = (iClass6Lev >= 4) ? (iClass6Lev / 2) : 0;
|
||||
if (iClass7 == CLASS_TYPE_HEXBLADE) iClass7Lev = (iClass7Lev >= 4) ? (iClass7Lev / 2) : 0;
|
||||
if (iClass8 == CLASS_TYPE_HEXBLADE) iClass8Lev = (iClass8Lev >= 4) ? (iClass8Lev / 2) : 0;
|
||||
|
||||
if (iClass1 == iFirstArcane) iClass1Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass2 == iFirstArcane) iClass2Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass3 == iFirstArcane) iClass3Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass4 == iFirstArcane) iClass4Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass5 == iFirstArcane) iClass5Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass6 == iFirstArcane) iClass6Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass7 == iFirstArcane) iClass7Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass8 == iFirstArcane) iClass8Lev += GetArcanePRCLevels(oCaster);
|
||||
|
||||
iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev);
|
||||
iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev);
|
||||
iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev);
|
||||
iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev);
|
||||
iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev);
|
||||
iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev);
|
||||
iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass4Lev);
|
||||
iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass5Lev);
|
||||
iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass5Lev);
|
||||
iClass7Lev += PracticedSpellcasting(oCaster, iClass7, iClass6Lev);
|
||||
iClass8Lev += PracticedSpellcasting(oCaster, iClass8, iClass7Lev);
|
||||
|
||||
if (!GetIsArcaneClass(iClass1, oCaster)) iClass1Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass2, oCaster)) iClass2Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass3, oCaster)) iClass3Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass4, oCaster)) iClass4Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass5, oCaster)) iClass5Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass6, oCaster)) iClass6Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass7, oCaster)) iClass7Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass8, oCaster)) iClass8Lev = 0;
|
||||
|
||||
|
||||
nTotal += iClass1Lev + iClass2Lev + iClass3Lev + iClass4Lev + iClass5Lev + iClass6Lev + iClass7Lev + iClass8Lev;
|
||||
|
||||
if (DEBUG) DoDebug("UrPriestCL Arcane - iClass1Lev "+IntToString(iClass1Lev)+" iClass2Lev "
|
||||
+IntToString(iClass2Lev)+" iClass3Lev "
|
||||
+IntToString(iClass3Lev)+" iClass4Lev "
|
||||
+IntToString(iClass4Lev)+" iClass5Lev "
|
||||
+IntToString(iClass5Lev)+" iClass6Lev "
|
||||
+IntToString(iClass6Lev)+" iClass7Lev "
|
||||
+IntToString(iClass7Lev)+" iClass8Lev "
|
||||
+IntToString(iClass8Lev));
|
||||
|
||||
nTotal += iClass1Lev + iClass2Lev + iClass3Lev;
|
||||
if (DEBUG) DoDebug("UrPriestCL Arcane - iClass1Lev "+IntToString(iClass1Lev)+" iClass2Lev "+IntToString(iClass2Lev)+" iClass3Lev "+IntToString(iClass3Lev));
|
||||
if (DEBUG) DoDebug("UrPriestCL Total - nTotal "+IntToString(nTotal));
|
||||
return nTotal/2;
|
||||
}
|
||||
@ -1620,29 +1686,65 @@ int GetLevelByTypeArcane(object oCaster = OBJECT_SELF)
|
||||
int iClass1 = GetClassByPosition(1, oCaster);
|
||||
int iClass2 = GetClassByPosition(2, oCaster);
|
||||
int iClass3 = GetClassByPosition(3, oCaster);
|
||||
int iClass4 = GetClassByPosition(4, oCaster);
|
||||
int iClass5 = GetClassByPosition(5, oCaster);
|
||||
int iClass6 = GetClassByPosition(6, oCaster);
|
||||
int iClass7 = GetClassByPosition(8, oCaster);
|
||||
int iClass8 = GetClassByPosition(8, oCaster);
|
||||
|
||||
int iClass1Lev = GetLevelByPosition(1, oCaster);
|
||||
int iClass2Lev = GetLevelByPosition(2, oCaster);
|
||||
int iClass3Lev = GetLevelByPosition(3, oCaster);
|
||||
int iClass4Lev = GetLevelByPosition(4, oCaster);
|
||||
int iClass5Lev = GetLevelByPosition(5, oCaster);
|
||||
int iClass6Lev = GetLevelByPosition(6, oCaster);
|
||||
int iClass7Lev = GetLevelByPosition(7, oCaster);
|
||||
int iClass8Lev = GetLevelByPosition(8, oCaster);
|
||||
|
||||
if (iClass1 == CLASS_TYPE_HEXBLADE) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
|
||||
if (iClass2 == CLASS_TYPE_HEXBLADE) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
|
||||
if (iClass3 == CLASS_TYPE_HEXBLADE) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0;
|
||||
if (iClass4 == CLASS_TYPE_HEXBLADE) iClass4Lev = (iClass4Lev >= 4) ? (iClass4Lev / 2) : 0;
|
||||
if (iClass5 == CLASS_TYPE_HEXBLADE) iClass5Lev = (iClass5Lev >= 4) ? (iClass5Lev / 2) : 0;
|
||||
if (iClass6 == CLASS_TYPE_HEXBLADE) iClass6Lev = (iClass6Lev >= 4) ? (iClass6Lev / 2) : 0;
|
||||
if (iClass7 == CLASS_TYPE_HEXBLADE) iClass7Lev = (iClass7Lev >= 4) ? (iClass7Lev / 2) : 0;
|
||||
if (iClass8 == CLASS_TYPE_HEXBLADE) iClass8Lev = (iClass8Lev >= 4) ? (iClass8Lev / 2) : 0;
|
||||
|
||||
if (iClass1 == iFirstArcane) iClass1Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass2 == iFirstArcane) iClass2Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass3 == iFirstArcane) iClass3Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass4 == iFirstArcane) iClass4Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass5 == iFirstArcane) iClass5Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass6 == iFirstArcane) iClass6Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass7 == iFirstArcane) iClass7Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass8 == iFirstArcane) iClass8Lev += GetArcanePRCLevels(oCaster);
|
||||
|
||||
iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev);
|
||||
iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev);
|
||||
iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev);
|
||||
iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass4Lev);
|
||||
iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass5Lev);
|
||||
iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass5Lev);
|
||||
iClass7Lev += PracticedSpellcasting(oCaster, iClass7, iClass6Lev);
|
||||
iClass8Lev += PracticedSpellcasting(oCaster, iClass8, iClass7Lev);
|
||||
|
||||
if (!GetIsArcaneClass(iClass1, oCaster)) iClass1Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass2, oCaster)) iClass2Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass3, oCaster)) iClass3Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass4, oCaster)) iClass4Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass5, oCaster)) iClass5Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass6, oCaster)) iClass6Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass7, oCaster)) iClass7Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass8, oCaster)) iClass8Lev = 0;
|
||||
|
||||
if (iClass1Lev > iBest) iBest = iClass1Lev;
|
||||
if (iClass2Lev > iBest) iBest = iClass2Lev;
|
||||
if (iClass3Lev > iBest) iBest = iClass3Lev;
|
||||
if (iClass4Lev > iBest) iBest = iClass4Lev;
|
||||
if (iClass5Lev > iBest) iBest = iClass5Lev;
|
||||
if (iClass6Lev > iBest) iBest = iClass6Lev;
|
||||
if (iClass7Lev > iBest) iBest = iClass7Lev;
|
||||
if (iClass8Lev > iBest) iBest = iClass8Lev;
|
||||
|
||||
return iBest;
|
||||
}
|
||||
@ -1654,29 +1756,68 @@ int GetLevelByTypeDivine(object oCaster = OBJECT_SELF)
|
||||
int iClass1 = GetClassByPosition(1, oCaster);
|
||||
int iClass2 = GetClassByPosition(2, oCaster);
|
||||
int iClass3 = GetClassByPosition(3, oCaster);
|
||||
int iClass4 = GetClassByPosition(4, oCaster);
|
||||
int iClass5 = GetClassByPosition(5, oCaster);
|
||||
int iClass6 = GetClassByPosition(6, oCaster);
|
||||
int iClass7 = GetClassByPosition(8, oCaster);
|
||||
int iClass8 = GetClassByPosition(8, oCaster);
|
||||
|
||||
int iClass1Lev = GetLevelByPosition(1, oCaster);
|
||||
int iClass2Lev = GetLevelByPosition(2, oCaster);
|
||||
int iClass3Lev = GetLevelByPosition(3, oCaster);
|
||||
int iClass4Lev = GetLevelByPosition(4, oCaster);
|
||||
int iClass5Lev = GetLevelByPosition(5, oCaster);
|
||||
int iClass6Lev = GetLevelByPosition(6, oCaster);
|
||||
int iClass7Lev = GetLevelByPosition(7, oCaster);
|
||||
int iClass8Lev = GetLevelByPosition(8, oCaster);
|
||||
|
||||
if (iClass1 == CLASS_TYPE_PALADIN || iClass1 == CLASS_TYPE_RANGER) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
|
||||
if (iClass2 == CLASS_TYPE_PALADIN || iClass2 == CLASS_TYPE_RANGER) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
|
||||
if (iClass3 == CLASS_TYPE_PALADIN || iClass3 == CLASS_TYPE_RANGER) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0;
|
||||
if (iClass4 == CLASS_TYPE_PALADIN || iClass4 == CLASS_TYPE_RANGER) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
|
||||
if (iClass5 == CLASS_TYPE_PALADIN || iClass5 == CLASS_TYPE_RANGER) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
|
||||
if (iClass6 == CLASS_TYPE_PALADIN || iClass6 == CLASS_TYPE_RANGER) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0;
|
||||
if (iClass7 == CLASS_TYPE_PALADIN || iClass7 == CLASS_TYPE_RANGER) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
|
||||
if (iClass8 == CLASS_TYPE_PALADIN || iClass8 == CLASS_TYPE_RANGER) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
|
||||
|
||||
if (iClass1 == iFirstDivine) iClass1Lev += GetDivinePRCLevels(oCaster);
|
||||
if (iClass2 == iFirstDivine) iClass2Lev += GetDivinePRCLevels(oCaster);
|
||||
if (iClass3 == iFirstDivine) iClass3Lev += GetDivinePRCLevels(oCaster);
|
||||
if (iClass4 == iFirstDivine) iClass4Lev += GetDivinePRCLevels(oCaster);
|
||||
if (iClass5 == iFirstDivine) iClass5Lev += GetDivinePRCLevels(oCaster);
|
||||
if (iClass6 == iFirstDivine) iClass6Lev += GetDivinePRCLevels(oCaster);
|
||||
if (iClass7 == iFirstDivine) iClass7Lev += GetDivinePRCLevels(oCaster);
|
||||
if (iClass8 == iFirstDivine) iClass8Lev += GetDivinePRCLevels(oCaster);
|
||||
|
||||
iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev);
|
||||
iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev);
|
||||
iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev);
|
||||
iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass4Lev);
|
||||
iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass5Lev);
|
||||
iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass5Lev);
|
||||
iClass7Lev += PracticedSpellcasting(oCaster, iClass7, iClass6Lev);
|
||||
iClass8Lev += PracticedSpellcasting(oCaster, iClass8, iClass7Lev);
|
||||
|
||||
if (!GetIsDivineClass(iClass1, oCaster)) iClass1Lev = 0;
|
||||
if (!GetIsDivineClass(iClass2, oCaster)) iClass2Lev = 0;
|
||||
if (!GetIsDivineClass(iClass3, oCaster)) iClass3Lev = 0;
|
||||
if (!GetIsDivineClass(iClass4, oCaster)) iClass4Lev = 0;
|
||||
if (!GetIsDivineClass(iClass5, oCaster)) iClass5Lev = 0;
|
||||
if (!GetIsDivineClass(iClass6, oCaster)) iClass6Lev = 0;
|
||||
if (!GetIsDivineClass(iClass7, oCaster)) iClass7Lev = 0;
|
||||
if (!GetIsDivineClass(iClass8, oCaster)) iClass8Lev = 0;
|
||||
|
||||
if (iClass1Lev > iBest) iBest = iClass1Lev;
|
||||
if (iClass2Lev > iBest) iBest = iClass2Lev;
|
||||
if (iClass3Lev > iBest) iBest = iClass3Lev;
|
||||
if (iClass4Lev > iBest) iBest = iClass4Lev;
|
||||
if (iClass5Lev > iBest) iBest = iClass5Lev;
|
||||
if (iClass6Lev > iBest) iBest = iClass6Lev;
|
||||
if (iClass7Lev > iBest) iBest = iClass7Lev;
|
||||
if (iClass8Lev > iBest) iBest = iClass8Lev;
|
||||
|
||||
return iBest;
|
||||
}
|
||||
|
||||
//:: Test Void
|
||||
//void main (){}
|
@ -6,7 +6,7 @@
|
||||
Stratovarius
|
||||
*/
|
||||
|
||||
|
||||
//:: Updated for .35 by Jaysyn 2023/03/10
|
||||
|
||||
////////////////Begin Generic////////////////
|
||||
|
||||
@ -1606,6 +1606,8 @@ void RemoveOldSongs(object oPC)
|
||||
// since in NWN character can have max 3 classes. We also know that Eldritch Theurge
|
||||
// is at positon 3 (unless player is cheating).
|
||||
// So we just need to check the third class.
|
||||
|
||||
//:: [PRC .35] This function will require marker feats
|
||||
int GetETArcaneClass(object oPC)
|
||||
{
|
||||
int nClass = GetClassByPosition(1, oPC);
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* Core functions taken from high up the branch
|
||||
which are needed lower. */
|
||||
|
||||
//:: Updated for .35 by Jaysyn 2023/03/10
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Function Prototypes */
|
||||
@ -446,7 +447,7 @@ int PRCGetSpellLevel(object oCreature, int nSpell)
|
||||
return nSpellLevel;
|
||||
|
||||
int i;
|
||||
for (i=1;i<=3;i++)
|
||||
for (i=1;i<=8;i++)
|
||||
{
|
||||
nClass = GetClassByPosition(i, oCreature);
|
||||
int nCharLevel = GetLevelByClass(nClass, oCreature);
|
||||
@ -514,7 +515,7 @@ int GetIsNSBClass(int nClass)
|
||||
int UseNewSpellBook(object oCreature)
|
||||
{
|
||||
int i;
|
||||
for (i = 1; i <= 3; i++)
|
||||
for (i = 1; i <= 8; i++)
|
||||
{
|
||||
int nClass = GetClassByPosition(i, oCreature);
|
||||
if(GetIsNSBClass(nClass))
|
||||
@ -557,7 +558,7 @@ int PRCGetHasSpell(int nRealSpellID, object oCreature = OBJECT_SELF)
|
||||
int nClass, nSpellbookID, nCount, nMeta, i, j;
|
||||
int nSpellbookType, nSpellLevel;
|
||||
string sFile, sFeat;
|
||||
for(i = 1; i <= 3; i++)
|
||||
for(i = 1; i <= 8; i++)
|
||||
{
|
||||
nClass = GetClassByPosition(i, oCreature);
|
||||
sFile = GetFileForClass(nClass);
|
||||
@ -609,7 +610,7 @@ int PRCGetIsRealSpellKnown(int nRealSpellID, object oPC = OBJECT_SELF)
|
||||
return TRUE; // means they know the spell (close enough)
|
||||
int nClass;
|
||||
int nClassSlot = 1;
|
||||
while(nClassSlot <= 3)
|
||||
while(nClassSlot <= 8)
|
||||
{
|
||||
nClass = GetClassByPosition(nClassSlot, oPC);
|
||||
if(GetIsDivineClass(nClass) || GetIsArcaneClass(nClass))
|
||||
|
@ -8,6 +8,8 @@
|
||||
//:: Created On: August 31st, 2005
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
//:: Updated for .35 by Jaysyn 2023/03/10
|
||||
|
||||
|
||||
// Function returns the domain in the input slot.
|
||||
// A person can have a maximum of 5 bonus domains.
|
||||
@ -240,7 +242,7 @@ void CastDomainSpell(object oPC, int nSlot, int nLevel)
|
||||
if(!nCount)
|
||||
{
|
||||
int n;
|
||||
for(n = 1; n < 4; n++)
|
||||
for(n = 1; n < 8; n++)
|
||||
{
|
||||
nClass = GetClassByPosition(n, oPC);
|
||||
|
||||
|
@ -15,6 +15,8 @@
|
||||
//:: Created On: Dec 19, 2003
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
//:: Updated for .35 by Jaysyn 2023/03/10
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// This is the "event" that is called to re-evalutate PRC bonuses. Currently
|
||||
// it is fired by OnEquip, OnUnequip and OnLevel. If you want to move any
|
||||
@ -23,6 +25,10 @@
|
||||
// feats to their own self-contained script
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
//:: Test Void
|
||||
//void main (){}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Constants */
|
||||
//////////////////////////////////////////////////
|
||||
@ -89,7 +95,7 @@ void SetupCharacterData(object oPC)
|
||||
// use bitwise to combine flags
|
||||
|
||||
int i, iData, iShifting;
|
||||
for(i = 1; i <= 3; i++)
|
||||
for(i = 1; i <= 8; i++)
|
||||
{
|
||||
int nClassType = GetClassByPosition(i, oPC);
|
||||
if(nClassType != CLASS_TYPE_INVALID)
|
||||
@ -268,7 +274,12 @@ void SetupCharacterData(object oPC)
|
||||
SetPersistantLocalInt(oPC, "PRC_UNI_SHIFT_SCRIPT", 1);
|
||||
|
||||
//Setup class info for onleveldown script
|
||||
int nCharData = ((GetClassByPosition(3, oPC) & 0xFF) << 16) |
|
||||
int nCharData = ((GetClassByPosition(8, oPC) & 0xFF) << 56) |
|
||||
((GetClassByPosition(7, oPC) & 0xFF) << 48) |
|
||||
((GetClassByPosition(5, oPC) & 0xFF) << 40) |
|
||||
((GetClassByPosition(5, oPC) & 0xFF) << 32) |
|
||||
((GetClassByPosition(4, oPC) & 0xFF) << 24) |
|
||||
((GetClassByPosition(3, oPC) & 0xFF) << 16) |
|
||||
((GetClassByPosition(2, oPC) & 0xFF) << 8) |
|
||||
(GetClassByPosition(1, oPC) & 0xFF);
|
||||
|
||||
@ -558,6 +569,7 @@ void EvalPRCFeats(object oPC)
|
||||
// Must be after all evaluationscripts that need said function.
|
||||
ExecuteScript("prc_bab_caller", oPC);
|
||||
|
||||
//:: [PRC .35] Needs marker feats
|
||||
// Classes an invoker can take
|
||||
if(GetLevelByClass(CLASS_TYPE_MAESTER, oPC) ||
|
||||
GetLevelByClass(CLASS_TYPE_ACOLYTE, oPC) ||
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
|
||||
*/
|
||||
|
||||
//:: Updated for .35 by Jaysyn 2023/03/10
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Constants */
|
||||
@ -38,7 +38,11 @@ void CheckForPnPHolyAvenger(object oItem);
|
||||
|
||||
#include "inc_utility"
|
||||
#include "prc_inc_newip"
|
||||
#include "prc_inc_castlvl"
|
||||
#include "inc_newspellbook"
|
||||
|
||||
//:: Test Void
|
||||
//void main (){}
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Internal functions */
|
||||
@ -134,7 +138,7 @@ void _prc_inc_itmrstr_ApplyWizardry(object oPC, object oItem, int nSpellLevel, s
|
||||
|
||||
SetLocalInt(oItem, "PRC_Wizardry"+IntToString(nSpellLevel), TRUE);
|
||||
int nClass, nSlots, i;
|
||||
for(i = 1; i <= 3; i++)
|
||||
for(i = 1; i <= 8; i++)
|
||||
{
|
||||
nClass = GetClassByPosition(i, oPC);
|
||||
if((sType == "A" && GetIsArcaneClass(nClass)) || (sType == "D" && GetIsDivineClass(nClass)))
|
||||
|
@ -1,3 +1,5 @@
|
||||
//:: Updated for .35 by Jaysyn 2023/03/10
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Constants */
|
||||
//////////////////////////////////////////////////
|
||||
@ -589,6 +591,11 @@ void StoreCohort(object oCohort)
|
||||
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_class1", GetClassByPosition(1, oCohort));
|
||||
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_class2", GetClassByPosition(2, oCohort));
|
||||
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_class3", GetClassByPosition(3, oCohort));
|
||||
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_class4", GetClassByPosition(4, oCohort));
|
||||
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_class5", GetClassByPosition(5, oCohort));
|
||||
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_class6", GetClassByPosition(6, oCohort));
|
||||
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_class7", GetClassByPosition(7, oCohort));
|
||||
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_class8", GetClassByPosition(8, oCohort));
|
||||
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_order", GetLawChaosValue(oCohort));
|
||||
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_moral", GetGoodEvilValue(oCohort));
|
||||
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_ethran", GetHasFeat(FEAT_ETHRAN, oCohort));
|
||||
@ -1032,3 +1039,5 @@ void AddPremadeCohortsToDB()
|
||||
SetCampaignInt(COHORT_DATABASE, "PremadeCohorts", TRUE);
|
||||
}
|
||||
|
||||
//:: Test Void
|
||||
//void main (){}
|
@ -14,6 +14,8 @@
|
||||
be necessary, except when new casting feats are created.
|
||||
*/
|
||||
|
||||
//:: Updated for .35 by Jaysyn 2023/03/10
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Function prototypes */
|
||||
@ -407,28 +409,50 @@ int GetPrCAdjustedCasterLevel(int nClass, object oCaster = OBJECT_SELF, int bAdj
|
||||
|
||||
int GetPrCAdjustedCasterLevelByType(int nClassType, object oCaster = OBJECT_SELF, int bAdjustForPractisedSpellcaster = TRUE)
|
||||
{
|
||||
int nHighest;
|
||||
int nClass1, nClass2, nClass3;
|
||||
int nClass1Lvl, nClass2Lvl, nClass3Lvl;
|
||||
int nClassLvl;
|
||||
int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8;
|
||||
int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl;
|
||||
|
||||
nClass1 = GetClassByPosition(1, oCaster);
|
||||
nClass2 = GetClassByPosition(2, oCaster);
|
||||
nClass3 = GetClassByPosition(3, oCaster);
|
||||
nClass4 = GetClassByPosition(4, oCaster);
|
||||
nClass5 = GetClassByPosition(5, oCaster);
|
||||
nClass6 = GetClassByPosition(6, oCaster);
|
||||
nClass7 = GetClassByPosition(7, oCaster);
|
||||
nClass8 = GetClassByPosition(8, oCaster);
|
||||
|
||||
if(nClassType == TYPE_ARCANE && (GetFirstArcaneClassPosition(oCaster) > 0))
|
||||
{
|
||||
if (GetIsArcaneClass(nClass1, oCaster)) nClass1Lvl = GetPrCAdjustedCasterLevel(nClass1, oCaster, bAdjustForPractisedSpellcaster);
|
||||
if (GetIsArcaneClass(nClass2, oCaster)) nClass2Lvl = GetPrCAdjustedCasterLevel(nClass2, oCaster, bAdjustForPractisedSpellcaster);
|
||||
if (GetIsArcaneClass(nClass3, oCaster)) nClass3Lvl = GetPrCAdjustedCasterLevel(nClass3, oCaster, bAdjustForPractisedSpellcaster);
|
||||
if (GetIsArcaneClass(nClass4, oCaster)) nClass4Lvl = GetPrCAdjustedCasterLevel(nClass4, oCaster, bAdjustForPractisedSpellcaster);
|
||||
if (GetIsArcaneClass(nClass5, oCaster)) nClass5Lvl = GetPrCAdjustedCasterLevel(nClass5, oCaster, bAdjustForPractisedSpellcaster);
|
||||
if (GetIsArcaneClass(nClass6, oCaster)) nClass6Lvl = GetPrCAdjustedCasterLevel(nClass6, oCaster, bAdjustForPractisedSpellcaster);
|
||||
if (GetIsArcaneClass(nClass7, oCaster)) nClass7Lvl = GetPrCAdjustedCasterLevel(nClass7, oCaster, bAdjustForPractisedSpellcaster);
|
||||
if (GetIsArcaneClass(nClass8, oCaster)) nClass8Lvl = GetPrCAdjustedCasterLevel(nClass8, oCaster, bAdjustForPractisedSpellcaster);
|
||||
}
|
||||
else if (nClassType == TYPE_DIVINE && (GetFirstDivineClassPosition(oCaster) > 0))
|
||||
{
|
||||
if (GetIsDivineClass(nClass1, oCaster)) nClass1Lvl = GetPrCAdjustedCasterLevel(nClass1, oCaster, bAdjustForPractisedSpellcaster);
|
||||
if (GetIsDivineClass(nClass2, oCaster)) nClass2Lvl = GetPrCAdjustedCasterLevel(nClass2, oCaster, bAdjustForPractisedSpellcaster);
|
||||
if (GetIsDivineClass(nClass3, oCaster)) nClass3Lvl = GetPrCAdjustedCasterLevel(nClass3, oCaster, bAdjustForPractisedSpellcaster);
|
||||
if (GetIsDivineClass(nClass4, oCaster)) nClass4Lvl = GetPrCAdjustedCasterLevel(nClass4, oCaster, bAdjustForPractisedSpellcaster);
|
||||
if (GetIsDivineClass(nClass5, oCaster)) nClass5Lvl = GetPrCAdjustedCasterLevel(nClass5, oCaster, bAdjustForPractisedSpellcaster);
|
||||
if (GetIsDivineClass(nClass6, oCaster)) nClass6Lvl = GetPrCAdjustedCasterLevel(nClass6, oCaster, bAdjustForPractisedSpellcaster);
|
||||
if (GetIsDivineClass(nClass7, oCaster)) nClass7Lvl = GetPrCAdjustedCasterLevel(nClass7, oCaster, bAdjustForPractisedSpellcaster);
|
||||
if (GetIsDivineClass(nClass8, oCaster)) nClass8Lvl = GetPrCAdjustedCasterLevel(nClass8, oCaster, bAdjustForPractisedSpellcaster);
|
||||
}
|
||||
nHighest = nClass1Lvl;
|
||||
int nHighest = nClass1Lvl;
|
||||
if (nClass2Lvl > nHighest) nHighest = nClass2Lvl;
|
||||
if (nClass3Lvl > nHighest) nHighest = nClass3Lvl;
|
||||
return nHighest;
|
||||
if (nClass4Lvl > nHighest) nHighest = nClass4Lvl;
|
||||
if (nClass5Lvl > nHighest) nHighest = nClass5Lvl;
|
||||
if (nClass6Lvl > nHighest) nHighest = nClass6Lvl;
|
||||
if (nClass7Lvl > nHighest) nHighest = nClass7Lvl;
|
||||
if (nClass8Lvl > nHighest) nHighest = nClass8Lvl;
|
||||
return nHighest;
|
||||
}
|
||||
|
||||
int GetLevelByTypeArcaneFeats(object oCaster = OBJECT_SELF, int iSpellID = -1)
|
||||
@ -438,9 +462,20 @@ int GetLevelByTypeArcaneFeats(object oCaster = OBJECT_SELF, int iSpellID = -1)
|
||||
int iClass1 = GetClassByPosition(1, oCaster);
|
||||
int iClass2 = GetClassByPosition(2, oCaster);
|
||||
int iClass3 = GetClassByPosition(3, oCaster);
|
||||
int iClass4 = GetClassByPosition(4, oCaster);
|
||||
int iClass5 = GetClassByPosition(5, oCaster);
|
||||
int iClass6 = GetClassByPosition(6, oCaster);
|
||||
int iClass7 = GetClassByPosition(7, oCaster);
|
||||
int iClass8 = GetClassByPosition(8, oCaster);
|
||||
|
||||
int iClass1Lev = GetLevelByPosition(1, oCaster);
|
||||
int iClass2Lev = GetLevelByPosition(2, oCaster);
|
||||
int iClass3Lev = GetLevelByPosition(3, oCaster);
|
||||
int iClass4Lev = GetLevelByPosition(4, oCaster);
|
||||
int iClass5Lev = GetLevelByPosition(5, oCaster);
|
||||
int iClass6Lev = GetLevelByPosition(6, oCaster);
|
||||
int iClass7Lev = GetLevelByPosition(7, oCaster);
|
||||
int iClass8Lev = GetLevelByPosition(8, oCaster);
|
||||
|
||||
if (iSpellID = -1) iSpellID = PRCGetSpellId(oCaster);
|
||||
|
||||
@ -454,7 +489,18 @@ int GetLevelByTypeArcaneFeats(object oCaster = OBJECT_SELF, int iSpellID = -1)
|
||||
if (iClass1 == CLASS_TYPE_HEXBLADE) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
|
||||
if (iClass2 == CLASS_TYPE_HEXBLADE) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
|
||||
if (iClass3 == CLASS_TYPE_HEXBLADE) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0;
|
||||
if (iClass4 == CLASS_TYPE_HEXBLADE) iClass4Lev = (iClass4Lev >= 4) ? (iClass4Lev / 2) : 0;
|
||||
if (iClass5 == CLASS_TYPE_HEXBLADE) iClass5Lev = (iClass5Lev >= 4) ? (iClass5Lev / 2) : 0;
|
||||
if (iClass6 == CLASS_TYPE_HEXBLADE) iClass6Lev = (iClass6Lev >= 4) ? (iClass6Lev / 2) : 0;
|
||||
if (iClass7 == CLASS_TYPE_HEXBLADE) iClass7Lev = (iClass7Lev >= 4) ? (iClass7Lev / 2) : 0;
|
||||
if (iClass8 == CLASS_TYPE_HEXBLADE) iClass8Lev = (iClass8Lev >= 4) ? (iClass8Lev / 2) : 0;
|
||||
|
||||
if (iClass1 == iFirstArcane) iClass1Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass2 == iFirstArcane) iClass2Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass3 == iFirstArcane) iClass3Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass1 == iFirstArcane) iClass1Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass2 == iFirstArcane) iClass2Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass3 == iFirstArcane) iClass3Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass1 == iFirstArcane) iClass1Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass2 == iFirstArcane) iClass2Lev += GetArcanePRCLevels(oCaster);
|
||||
if (iClass3 == iFirstArcane) iClass3Lev += GetArcanePRCLevels(oCaster);
|
||||
@ -462,18 +508,38 @@ int GetLevelByTypeArcaneFeats(object oCaster = OBJECT_SELF, int iSpellID = -1)
|
||||
iClass1Lev += iBoost;
|
||||
iClass2Lev += iBoost;
|
||||
iClass3Lev += iBoost;
|
||||
iClass4Lev += iBoost;
|
||||
iClass5Lev += iBoost;
|
||||
iClass6Lev += iBoost;
|
||||
iClass7Lev += iBoost;
|
||||
iClass8Lev += iBoost;
|
||||
|
||||
iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev);
|
||||
iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev);
|
||||
iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev);
|
||||
iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass1Lev);
|
||||
iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass2Lev);
|
||||
iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass3Lev);
|
||||
iClass7Lev += PracticedSpellcasting(oCaster, iClass7, iClass1Lev);
|
||||
iClass8Lev += PracticedSpellcasting(oCaster, iClass8, iClass2Lev);
|
||||
|
||||
if (!GetIsArcaneClass(iClass1, oCaster)) iClass1Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass2, oCaster)) iClass2Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass3, oCaster)) iClass3Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass4, oCaster)) iClass4Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass5, oCaster)) iClass5Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass6, oCaster)) iClass6Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass7, oCaster)) iClass7Lev = 0;
|
||||
if (!GetIsArcaneClass(iClass8, oCaster)) iClass8Lev = 0;
|
||||
|
||||
if (iClass1Lev > iBest) iBest = iClass1Lev;
|
||||
if (iClass2Lev > iBest) iBest = iClass2Lev;
|
||||
if (iClass3Lev > iBest) iBest = iClass3Lev;
|
||||
if (iClass4Lev > iBest) iBest = iClass4Lev;
|
||||
if (iClass5Lev > iBest) iBest = iClass5Lev;
|
||||
if (iClass6Lev > iBest) iBest = iClass6Lev;
|
||||
if (iClass7Lev > iBest) iBest = iClass7Lev;
|
||||
if (iClass8Lev > iBest) iBest = iClass8Lev;
|
||||
|
||||
return iBest;
|
||||
}
|
||||
@ -485,9 +551,20 @@ int GetLevelByTypeDivineFeats(object oCaster = OBJECT_SELF, int iSpellID = -1)
|
||||
int iClass1 = GetClassByPosition(1, oCaster);
|
||||
int iClass2 = GetClassByPosition(2, oCaster);
|
||||
int iClass3 = GetClassByPosition(3, oCaster);
|
||||
int iClass4 = GetClassByPosition(4, oCaster);
|
||||
int iClass5 = GetClassByPosition(5, oCaster);
|
||||
int iClass6 = GetClassByPosition(6, oCaster);
|
||||
int iClass7 = GetClassByPosition(7, oCaster);
|
||||
int iClass8 = GetClassByPosition(8, oCaster);
|
||||
|
||||
int iClass1Lev = GetLevelByPosition(1, oCaster);
|
||||
int iClass2Lev = GetLevelByPosition(2, oCaster);
|
||||
int iClass3Lev = GetLevelByPosition(3, oCaster);
|
||||
int iClass4Lev = GetLevelByPosition(4, oCaster);
|
||||
int iClass5Lev = GetLevelByPosition(5, oCaster);
|
||||
int iClass6Lev = GetLevelByPosition(6, oCaster);
|
||||
int iClass7Lev = GetLevelByPosition(7, oCaster);
|
||||
int iClass8Lev = GetLevelByPosition(8, oCaster);
|
||||
|
||||
if (iSpellID = -1) iSpellID = PRCGetSpellId(oCaster);
|
||||
|
||||
@ -499,36 +576,81 @@ int GetLevelByTypeDivineFeats(object oCaster = OBJECT_SELF, int iSpellID = -1)
|
||||
|
||||
if (iClass1 == CLASS_TYPE_PALADIN
|
||||
|| iClass1 == CLASS_TYPE_RANGER
|
||||
|| iClass3 == CLASS_TYPE_ANTI_PALADIN)
|
||||
|| iClass1 == CLASS_TYPE_ANTI_PALADIN)
|
||||
iClass1Lev = iClass1Lev / 2;
|
||||
if (iClass2 == CLASS_TYPE_PALADIN
|
||||
|| iClass2 == CLASS_TYPE_RANGER
|
||||
|| iClass3 == CLASS_TYPE_ANTI_PALADIN)
|
||||
|| iClass2 == CLASS_TYPE_ANTI_PALADIN)
|
||||
iClass2Lev = iClass2Lev / 2;
|
||||
if (iClass3 == CLASS_TYPE_PALADIN
|
||||
|| iClass3 == CLASS_TYPE_RANGER
|
||||
|| iClass3 == CLASS_TYPE_ANTI_PALADIN)
|
||||
iClass3Lev = iClass3Lev / 2;
|
||||
if (iClass4 == CLASS_TYPE_PALADIN
|
||||
|| iClass4 == CLASS_TYPE_RANGER
|
||||
|| iClass4 == CLASS_TYPE_ANTI_PALADIN)
|
||||
iClass4Lev = iClass4Lev / 2;
|
||||
if (iClass5 == CLASS_TYPE_PALADIN
|
||||
|| iClass5 == CLASS_TYPE_RANGER
|
||||
|| iClass5 == CLASS_TYPE_ANTI_PALADIN)
|
||||
iClass5Lev = iClass5Lev / 2;
|
||||
if (iClass6 == CLASS_TYPE_PALADIN
|
||||
|| iClass6 == CLASS_TYPE_RANGER
|
||||
|| iClass6 == CLASS_TYPE_ANTI_PALADIN)
|
||||
iClass6Lev = iClass6Lev / 2;
|
||||
if (iClass7 == CLASS_TYPE_PALADIN
|
||||
|| iClass7 == CLASS_TYPE_RANGER
|
||||
|| iClass7 == CLASS_TYPE_ANTI_PALADIN)
|
||||
iClass7Lev = iClass7Lev / 2;
|
||||
if (iClass8 == CLASS_TYPE_PALADIN
|
||||
|| iClass8 == CLASS_TYPE_RANGER
|
||||
|| iClass8 == CLASS_TYPE_ANTI_PALADIN)
|
||||
iClass8Lev = iClass7Lev / 2;
|
||||
|
||||
if (iClass1 == iFirstDivine) iClass1Lev += GetDivinePRCLevels(oCaster);
|
||||
if (iClass2 == iFirstDivine) iClass2Lev += GetDivinePRCLevels(oCaster);
|
||||
if (iClass3 == iFirstDivine) iClass3Lev += GetDivinePRCLevels(oCaster);
|
||||
if (iClass4 == iFirstDivine) iClass4Lev += GetDivinePRCLevels(oCaster);
|
||||
if (iClass5 == iFirstDivine) iClass5Lev += GetDivinePRCLevels(oCaster);
|
||||
if (iClass6 == iFirstDivine) iClass6Lev += GetDivinePRCLevels(oCaster);
|
||||
if (iClass7 == iFirstDivine) iClass7Lev += GetDivinePRCLevels(oCaster);
|
||||
if (iClass8 == iFirstDivine) iClass8Lev += GetDivinePRCLevels(oCaster);
|
||||
|
||||
iClass1Lev += iBoost;
|
||||
iClass2Lev += iBoost;
|
||||
iClass3Lev += iBoost;
|
||||
iClass4Lev += iBoost;
|
||||
iClass5Lev += iBoost;
|
||||
iClass6Lev += iBoost;
|
||||
iClass7Lev += iBoost;
|
||||
iClass8Lev += iBoost;
|
||||
|
||||
iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev);
|
||||
iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev);
|
||||
iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev);
|
||||
iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass4Lev);
|
||||
iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass5Lev);
|
||||
iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass6Lev);
|
||||
iClass7Lev += PracticedSpellcasting(oCaster, iClass1, iClass7Lev);
|
||||
iClass8Lev += PracticedSpellcasting(oCaster, iClass2, iClass8Lev);
|
||||
|
||||
if (!GetIsDivineClass(iClass1, oCaster)) iClass1Lev = 0;
|
||||
if (!GetIsDivineClass(iClass2, oCaster)) iClass2Lev = 0;
|
||||
if (!GetIsDivineClass(iClass3, oCaster)) iClass3Lev = 0;
|
||||
if (!GetIsDivineClass(iClass4, oCaster)) iClass4Lev = 0;
|
||||
if (!GetIsDivineClass(iClass5, oCaster)) iClass5Lev = 0;
|
||||
if (!GetIsDivineClass(iClass6, oCaster)) iClass6Lev = 0;
|
||||
if (!GetIsDivineClass(iClass7, oCaster)) iClass7Lev = 0;
|
||||
if (!GetIsDivineClass(iClass8, oCaster)) iClass3Lev = 0;
|
||||
|
||||
if (iClass1Lev > iBest) iBest = iClass1Lev;
|
||||
if (iClass2Lev > iBest) iBest = iClass2Lev;
|
||||
if (iClass3Lev > iBest) iBest = iClass3Lev;
|
||||
if (iClass4Lev > iBest) iBest = iClass4Lev;
|
||||
if (iClass5Lev > iBest) iBest = iClass5Lev;
|
||||
if (iClass6Lev > iBest) iBest = iClass6Lev;
|
||||
if (iClass7Lev > iBest) iBest = iClass7Lev;
|
||||
if (iClass8Lev > iBest) iBest = iClass8Lev;
|
||||
|
||||
return iBest;
|
||||
}
|
||||
@ -2041,7 +2163,7 @@ void PRCDecrementRemainingSpellUses(object oCreature, int nSpell)
|
||||
int nClass, nSpellbookID, nCount, nMeta, i, j;
|
||||
int nSpellbookType, nSpellLevel;
|
||||
string sFile, sFeat;
|
||||
for(i = 1; i <= 3; i++)
|
||||
for(i = 1; i <= 8; i++)
|
||||
{
|
||||
nClass = GetClassByPosition(i, oCreature);
|
||||
sFile = GetFileForClass(nClass);
|
||||
@ -2754,7 +2876,7 @@ int PRCGetSpellUsesLeft(int nRealSpellID, object oCreature = OBJECT_SELF)
|
||||
int nClass, nSpellbookID, nCount, i, j;
|
||||
int nSpellbookType, nSpellLevel;
|
||||
string sFile, sFeat;
|
||||
for(i = 1; i <= 3; i++)
|
||||
for(i = 1; i <= 8; i++)
|
||||
{
|
||||
nClass = GetClassByPosition(i, oCreature);
|
||||
sFile = GetFileForClass(nClass);
|
||||
@ -2920,3 +3042,6 @@ int X2PreSpellCastCode()
|
||||
|
||||
return nReturn;
|
||||
}
|
||||
|
||||
//:: Test Void
|
||||
//void main (){}
|
@ -1,6 +1,13 @@
|
||||
|
||||
//:: Updated for .35 by Jaysyn 2023/03/10
|
||||
|
||||
#include "prc_inc_function"
|
||||
#include "inc_nwnx_funcs"
|
||||
|
||||
//:: Test Void
|
||||
//void main (){}
|
||||
|
||||
|
||||
const int DEBUG_NATURAL_AC_CALCULATION = FALSE;
|
||||
int MAX_BONUS = GetPRCSwitch(PRC_PNP_SHIFTER_BONUS);
|
||||
const int MAX_PENALTY = 10;
|
||||
@ -1112,6 +1119,12 @@ void _prc_inc_PrintDebugItem(object oPC, string oItemType, object oItem)
|
||||
_prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(1, oItem));
|
||||
_prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(2, oItem));
|
||||
_prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(3, oItem));
|
||||
_prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(4, oItem));
|
||||
_prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(5, oItem));
|
||||
_prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(6, oItem));
|
||||
_prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(7, oItem));
|
||||
_prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(8, oItem));
|
||||
|
||||
_prc_inc_PrintShapeInfo(oPC, "------");
|
||||
|
||||
_prc_inc_PrintShapeInfo(oPC, "====== Main hand weapon: " + (GetIsWeaponEffective(oItem, FALSE) ? "Effective" : "Ineffective"));
|
||||
@ -1259,6 +1272,11 @@ void _prc_inc_PrintShape(object oPC, object oTemplate, int bForceLogPrint)
|
||||
_prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(1, oTemplate));
|
||||
_prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(2, oTemplate));
|
||||
_prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(3, oTemplate));
|
||||
_prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(4, oTemplate));
|
||||
_prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(5, oTemplate));
|
||||
_prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(6, oTemplate));
|
||||
_prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(7, oTemplate));
|
||||
_prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(8, oTemplate));
|
||||
|
||||
_prc_inc_PrintShapeInfo(oPC, "==========");
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
//:: Updated for .35 by Jaysyn 2023/03/10
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Constants */
|
||||
@ -33,6 +34,9 @@ const int POWER_LIST_WARMIND = CLASS_TYPE_WARMIND;
|
||||
|
||||
#include "psi_inc_const"
|
||||
|
||||
//:: Test Main
|
||||
//void main (){}
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Function prototypes */
|
||||
//////////////////////////////////////////////////
|
||||
@ -1059,13 +1063,36 @@ int GetManifesterLevel(object oManifester, int nSpecificClass = CLASS_TYPE_INVAL
|
||||
}
|
||||
|
||||
int GetHighestManifesterLevel(object oCreature)
|
||||
{
|
||||
int n = 0;
|
||||
int nHighest;
|
||||
int nTemp;
|
||||
|
||||
while(n <= 8)
|
||||
{
|
||||
if(GetClassByPosition(n, oCreature) != CLASS_TYPE_INVALID)
|
||||
{
|
||||
nTemp = GetManifesterLevel(oCreature, GetClassByPosition(n, oCreature));
|
||||
|
||||
if(nTemp > nHighest)
|
||||
nHighest = nTemp;
|
||||
}
|
||||
n++;
|
||||
|
||||
}
|
||||
|
||||
return nHighest;
|
||||
}
|
||||
|
||||
/* int GetHighestManifesterLevel(object oCreature)
|
||||
{
|
||||
return max(max(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetManifesterLevel(oCreature, GetClassByPosition(1, oCreature)) : 0,
|
||||
GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID ? GetManifesterLevel(oCreature, GetClassByPosition(2, oCreature)) : 0
|
||||
),
|
||||
GetClassByPosition(3, oCreature) != CLASS_TYPE_INVALID ? GetManifesterLevel(oCreature, GetClassByPosition(3, oCreature)) : 0
|
||||
);
|
||||
}
|
||||
} */
|
||||
|
||||
int GetPowerLevel(object oManifester)
|
||||
{
|
||||
return GetLocalInt(oManifester, PRC_POWER_LEVEL);
|
||||
@ -1115,18 +1142,31 @@ int GetPrimaryPsionicClass(object oCreature = OBJECT_SELF)
|
||||
else
|
||||
{
|
||||
int nClassLvl;
|
||||
int nClass1, nClass2, nClass3;
|
||||
int nClass1Lvl, nClass2Lvl, nClass3Lvl;
|
||||
int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8;
|
||||
int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl;
|
||||
|
||||
nClass1 = GetClassByPosition(1, oCreature);
|
||||
nClass2 = GetClassByPosition(2, oCreature);
|
||||
nClass3 = GetClassByPosition(3, oCreature);
|
||||
nClass4 = GetClassByPosition(4, oCreature);
|
||||
nClass5 = GetClassByPosition(5, oCreature);
|
||||
nClass6 = GetClassByPosition(6, oCreature);
|
||||
nClass7 = GetClassByPosition(7, oCreature);
|
||||
nClass8 = GetClassByPosition(8, oCreature);
|
||||
|
||||
if(GetIsPsionicClass(nClass1)) nClass1Lvl = GetLevelByClass(nClass1, oCreature);
|
||||
if(GetIsPsionicClass(nClass2)) nClass2Lvl = GetLevelByClass(nClass2, oCreature);
|
||||
if(GetIsPsionicClass(nClass3)) nClass3Lvl = GetLevelByClass(nClass3, oCreature);
|
||||
if(GetIsPsionicClass(nClass4)) nClass4Lvl = GetLevelByClass(nClass4, oCreature);
|
||||
if(GetIsPsionicClass(nClass5)) nClass5Lvl = GetLevelByClass(nClass5, oCreature);
|
||||
if(GetIsPsionicClass(nClass6)) nClass6Lvl = GetLevelByClass(nClass6, oCreature);
|
||||
if(GetIsPsionicClass(nClass7)) nClass7Lvl = GetLevelByClass(nClass7, oCreature);
|
||||
if(GetIsPsionicClass(nClass8)) nClass8Lvl = GetLevelByClass(nClass8, oCreature);
|
||||
|
||||
|
||||
nClass = nClass1;
|
||||
nClassLvl = nClass1Lvl;
|
||||
|
||||
if(nClass2Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass2;
|
||||
@ -1137,6 +1177,32 @@ int GetPrimaryPsionicClass(object oCreature = OBJECT_SELF)
|
||||
nClass = nClass3;
|
||||
nClassLvl = nClass3Lvl;
|
||||
}
|
||||
if(nClass4Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass4;
|
||||
nClassLvl = nClass4Lvl;
|
||||
}
|
||||
if(nClass5Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass5;
|
||||
nClassLvl = nClass5Lvl;
|
||||
}
|
||||
if(nClass6Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass6;
|
||||
nClassLvl = nClass6Lvl;
|
||||
}
|
||||
if(nClass7Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass7;
|
||||
nClassLvl = nClass7Lvl;
|
||||
}
|
||||
if(nClass8Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass8;
|
||||
nClassLvl = nClass8Lvl;
|
||||
}
|
||||
|
||||
if(nClassLvl == 0)
|
||||
nClass = CLASS_TYPE_INVALID;
|
||||
}
|
||||
@ -1196,6 +1262,16 @@ int GetFirstPsionicClassPosition(object oCreature = OBJECT_SELF)
|
||||
return 2;
|
||||
if (GetIsPsionicClass(GetClassByPosition(3, oCreature)))
|
||||
return 3;
|
||||
if (GetIsPsionicClass(GetClassByPosition(4, oCreature)))
|
||||
return 4;
|
||||
if (GetIsPsionicClass(GetClassByPosition(5, oCreature)))
|
||||
return 5;
|
||||
if (GetIsPsionicClass(GetClassByPosition(6, oCreature)))
|
||||
return 6;
|
||||
if (GetIsPsionicClass(GetClassByPosition(7, oCreature)))
|
||||
return 7;
|
||||
if (GetIsPsionicClass(GetClassByPosition(8, oCreature)))
|
||||
return 8;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -16,6 +16,11 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
//:: Updated for .35 by Jaysyn 2023/03/10
|
||||
|
||||
//:: Test Void
|
||||
// void main (){}
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Function prototypes */
|
||||
//////////////////////////////////////////////////
|
||||
@ -295,13 +300,35 @@ int GetIsShadowMagicUser(object oCreature)
|
||||
}
|
||||
|
||||
int GetHighestShadowcasterLevel(object oCreature)
|
||||
{
|
||||
int n = 0;
|
||||
int nHighest;
|
||||
int nTemp;
|
||||
|
||||
while(n <= 8)
|
||||
{
|
||||
if(GetClassByPosition(n, oCreature) != CLASS_TYPE_INVALID)
|
||||
{
|
||||
nTemp = GetShadowcasterLevel(oCreature, GetClassByPosition(n, oCreature));
|
||||
|
||||
if(nTemp > nHighest)
|
||||
nHighest = nTemp;
|
||||
}
|
||||
n++;
|
||||
|
||||
}
|
||||
|
||||
return nHighest;
|
||||
}
|
||||
|
||||
/* int GetHighestShadowcasterLevel(object oCreature)
|
||||
{
|
||||
return max(max(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetShadowcasterLevel(oCreature, GetClassByPosition(1, oCreature)) : 0,
|
||||
GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID ? GetShadowcasterLevel(oCreature, GetClassByPosition(2, oCreature)) : 0
|
||||
),
|
||||
GetClassByPosition(3, oCreature) != CLASS_TYPE_INVALID ? GetShadowcasterLevel(oCreature, GetClassByPosition(3, oCreature)) : 0
|
||||
);
|
||||
}
|
||||
} */
|
||||
|
||||
int GetIsShadowMagicClass(int nClass)
|
||||
{
|
||||
@ -376,18 +403,30 @@ int GetPrimaryShadowMagicClass(object oCreature = OBJECT_SELF)
|
||||
else
|
||||
{
|
||||
int nClassLvl;
|
||||
int nClass1, nClass2, nClass3;
|
||||
int nClass1Lvl, nClass2Lvl, nClass3Lvl;
|
||||
int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8;
|
||||
int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl;
|
||||
|
||||
nClass1 = GetClassByPosition(1, oCreature);
|
||||
nClass2 = GetClassByPosition(2, oCreature);
|
||||
nClass3 = GetClassByPosition(3, oCreature);
|
||||
nClass4 = GetClassByPosition(4, oCreature);
|
||||
nClass5 = GetClassByPosition(5, oCreature);
|
||||
nClass6 = GetClassByPosition(6, oCreature);
|
||||
nClass7 = GetClassByPosition(7, oCreature);
|
||||
nClass8 = GetClassByPosition(8, oCreature);
|
||||
|
||||
if(GetIsShadowMagicClass(nClass1)) nClass1Lvl = GetLevelByClass(nClass1, oCreature);
|
||||
if(GetIsShadowMagicClass(nClass2)) nClass2Lvl = GetLevelByClass(nClass2, oCreature);
|
||||
if(GetIsShadowMagicClass(nClass3)) nClass3Lvl = GetLevelByClass(nClass3, oCreature);
|
||||
if(GetIsShadowMagicClass(nClass4)) nClass4Lvl = GetLevelByClass(nClass4, oCreature);
|
||||
if(GetIsShadowMagicClass(nClass5)) nClass5Lvl = GetLevelByClass(nClass5, oCreature);
|
||||
if(GetIsShadowMagicClass(nClass6)) nClass6Lvl = GetLevelByClass(nClass6, oCreature);
|
||||
if(GetIsShadowMagicClass(nClass7)) nClass7Lvl = GetLevelByClass(nClass7, oCreature);
|
||||
if(GetIsShadowMagicClass(nClass8)) nClass8Lvl = GetLevelByClass(nClass8, oCreature);
|
||||
|
||||
nClass = nClass1;
|
||||
nClassLvl = nClass1Lvl;
|
||||
|
||||
if(nClass2Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass2;
|
||||
@ -398,6 +437,32 @@ int GetPrimaryShadowMagicClass(object oCreature = OBJECT_SELF)
|
||||
nClass = nClass3;
|
||||
nClassLvl = nClass3Lvl;
|
||||
}
|
||||
if(nClass4Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass4;
|
||||
nClassLvl = nClass4Lvl;
|
||||
}
|
||||
if(nClass5Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass5;
|
||||
nClassLvl = nClass5Lvl;
|
||||
}
|
||||
if(nClass6Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass6;
|
||||
nClassLvl = nClass6Lvl;
|
||||
}
|
||||
if(nClass7Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass7;
|
||||
nClassLvl = nClass7Lvl;
|
||||
}
|
||||
if(nClass8Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass8;
|
||||
nClassLvl = nClass8Lvl;
|
||||
}
|
||||
|
||||
if(nClassLvl == 0)
|
||||
nClass = CLASS_TYPE_INVALID;
|
||||
}
|
||||
@ -413,6 +478,16 @@ int GetFirstShadowMagicClassPosition(object oCreature = OBJECT_SELF)
|
||||
return 2;
|
||||
if (GetIsShadowMagicClass(GetClassByPosition(3, oCreature)))
|
||||
return 3;
|
||||
if (GetIsShadowMagicClass(GetClassByPosition(4, oCreature)))
|
||||
return 4;
|
||||
if (GetIsShadowMagicClass(GetClassByPosition(5, oCreature)))
|
||||
return 5;
|
||||
if (GetIsShadowMagicClass(GetClassByPosition(6, oCreature)))
|
||||
return 6;
|
||||
if (GetIsShadowMagicClass(GetClassByPosition(7, oCreature)))
|
||||
return 7;
|
||||
if (GetIsShadowMagicClass(GetClassByPosition(8, oCreature)))
|
||||
return 8;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -16,6 +16,11 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
//:: Updated for .35 by Jaysyn 2023/03/10
|
||||
|
||||
//:: Test Void
|
||||
//void main (){}
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Constants */
|
||||
//////////////////////////////////////////////////
|
||||
|
@ -16,6 +16,11 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
//:: Updated for .35 by Jaysyn 2023/03/11
|
||||
|
||||
//:: Test Void
|
||||
//void main (){}
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Constants */
|
||||
//////////////////////////////////////////////////
|
||||
@ -529,13 +534,35 @@ int GetIsBladeMagicUser(object oCreature)
|
||||
}
|
||||
|
||||
int GetHighestInitiatorLevel(object oCreature)
|
||||
{
|
||||
int n = 0;
|
||||
int nHighest;
|
||||
int nTemp;
|
||||
|
||||
while(n <= 8)
|
||||
{
|
||||
if(GetClassByPosition(n, oCreature) != CLASS_TYPE_INVALID)
|
||||
{
|
||||
nTemp = GetInitiatorLevel(oCreature, GetClassByPosition(n, oCreature));
|
||||
|
||||
if(nTemp > nHighest)
|
||||
nHighest = nTemp;
|
||||
}
|
||||
n++;
|
||||
|
||||
}
|
||||
|
||||
return nHighest;
|
||||
}
|
||||
|
||||
/* int GetHighestInitiatorLevel(object oCreature)
|
||||
{
|
||||
return max(max(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetInitiatorLevel(oCreature, GetClassByPosition(1, oCreature)) : 0,
|
||||
GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID ? GetInitiatorLevel(oCreature, GetClassByPosition(2, oCreature)) : 0
|
||||
),
|
||||
GetClassByPosition(3, oCreature) != CLASS_TYPE_INVALID ? GetInitiatorLevel(oCreature, GetClassByPosition(3, oCreature)) : 0
|
||||
);
|
||||
}
|
||||
} */
|
||||
|
||||
int GetIsBladeMagicClass(int nClass)
|
||||
{
|
||||
@ -646,18 +673,30 @@ int GetPrimaryBladeMagicClass(object oCreature = OBJECT_SELF)
|
||||
}*/
|
||||
|
||||
int nClassLvl;
|
||||
int nClass1, nClass2, nClass3;
|
||||
int nClass1Lvl, nClass2Lvl, nClass3Lvl;
|
||||
int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8;
|
||||
int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl;
|
||||
|
||||
nClass1 = GetClassByPosition(1, oCreature);
|
||||
nClass2 = GetClassByPosition(2, oCreature);
|
||||
nClass3 = GetClassByPosition(3, oCreature);
|
||||
nClass4 = GetClassByPosition(4, oCreature);
|
||||
nClass5 = GetClassByPosition(5, oCreature);
|
||||
nClass6 = GetClassByPosition(6, oCreature);
|
||||
nClass7 = GetClassByPosition(7, oCreature);
|
||||
nClass8 = GetClassByPosition(8, oCreature);
|
||||
|
||||
if(GetIsBladeMagicClass(nClass1)) nClass1Lvl = GetLevelByClass(nClass1, oCreature);
|
||||
if(GetIsBladeMagicClass(nClass2)) nClass2Lvl = GetLevelByClass(nClass2, oCreature);
|
||||
if(GetIsBladeMagicClass(nClass3)) nClass3Lvl = GetLevelByClass(nClass3, oCreature);
|
||||
if(GetIsBladeMagicClass(nClass4)) nClass4Lvl = GetLevelByClass(nClass4, oCreature);
|
||||
if(GetIsBladeMagicClass(nClass5)) nClass5Lvl = GetLevelByClass(nClass5, oCreature);
|
||||
if(GetIsBladeMagicClass(nClass6)) nClass6Lvl = GetLevelByClass(nClass6, oCreature);
|
||||
if(GetIsBladeMagicClass(nClass7)) nClass7Lvl = GetLevelByClass(nClass7, oCreature);
|
||||
if(GetIsBladeMagicClass(nClass8)) nClass8Lvl = GetLevelByClass(nClass8, oCreature);
|
||||
|
||||
nClass = nClass1;
|
||||
nClassLvl = nClass1Lvl;
|
||||
|
||||
if(nClass2Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass2;
|
||||
@ -668,6 +707,32 @@ int GetPrimaryBladeMagicClass(object oCreature = OBJECT_SELF)
|
||||
nClass = nClass3;
|
||||
nClassLvl = nClass3Lvl;
|
||||
}
|
||||
if(nClass4Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass4;
|
||||
nClassLvl = nClass4Lvl;
|
||||
}
|
||||
if(nClass5Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass5;
|
||||
nClassLvl = nClass5Lvl;
|
||||
}
|
||||
if(nClass6Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass6;
|
||||
nClassLvl = nClass6Lvl;
|
||||
}
|
||||
if(nClass7Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass7;
|
||||
nClassLvl = nClass7Lvl;
|
||||
}
|
||||
if(nClass8Lvl > nClassLvl)
|
||||
{
|
||||
nClass = nClass8;
|
||||
nClassLvl = nClass8Lvl;
|
||||
}
|
||||
|
||||
if(nClassLvl == 0)
|
||||
nClass = CLASS_TYPE_INVALID;
|
||||
}
|
||||
@ -683,6 +748,16 @@ int GetFirstBladeMagicClassPosition(object oCreature = OBJECT_SELF)
|
||||
return 2;
|
||||
if (GetIsBladeMagicClass(GetClassByPosition(3, oCreature)))
|
||||
return 3;
|
||||
if (GetIsBladeMagicClass(GetClassByPosition(4, oCreature)))
|
||||
return 4;
|
||||
if (GetIsBladeMagicClass(GetClassByPosition(5, oCreature)))
|
||||
return 5;
|
||||
if (GetIsBladeMagicClass(GetClassByPosition(6, oCreature)))
|
||||
return 6;
|
||||
if (GetIsBladeMagicClass(GetClassByPosition(7, oCreature)))
|
||||
return 7;
|
||||
if (GetIsBladeMagicClass(GetClassByPosition(8, oCreature)))
|
||||
return 8;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -16,6 +16,11 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
//:: Updated for .35 by Jaysyn 2023/03/11
|
||||
|
||||
//:: Test Void
|
||||
//void main (){}
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Constants */
|
||||
//////////////////////////////////////////////////
|
||||
@ -340,13 +345,35 @@ int GetIsTruenamingUser(object oCreature)
|
||||
}
|
||||
|
||||
int GetHighestTrueSpeakerLevel(object oCreature)
|
||||
{
|
||||
int n = 0;
|
||||
int nHighest;
|
||||
int nTemp;
|
||||
|
||||
while(n <= 8)
|
||||
{
|
||||
if(GetClassByPosition(n, oCreature) != CLASS_TYPE_INVALID)
|
||||
{
|
||||
nTemp = GetTruespeakerLevel(oCreature, GetClassByPosition(n, oCreature));
|
||||
|
||||
if(nTemp > nHighest)
|
||||
nHighest = nTemp;
|
||||
}
|
||||
n++;
|
||||
|
||||
}
|
||||
|
||||
return nHighest;
|
||||
}
|
||||
|
||||
/* int GetHighestTrueSpeakerLevel(object oCreature)
|
||||
{
|
||||
return max(max(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetTruespeakerLevel(oCreature, GetClassByPosition(1, oCreature)) : 0,
|
||||
GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID ? GetTruespeakerLevel(oCreature, GetClassByPosition(2, oCreature)) : 0
|
||||
),
|
||||
GetClassByPosition(3, oCreature) != CLASS_TYPE_INVALID ? GetTruespeakerLevel(oCreature, GetClassByPosition(3, oCreature)) : 0
|
||||
);
|
||||
}
|
||||
} */
|
||||
|
||||
int GetIsTruenamingClass(int nClass)
|
||||
{
|
||||
@ -391,7 +418,7 @@ int GetTrueSpeakerDC(object oTrueSpeaker = OBJECT_SELF)
|
||||
nDC += GetAbilityModifier(GetTruenameAbilityOfClass(nClass), oTrueSpeaker);
|
||||
int nFeat = -1;
|
||||
|
||||
// Focused Lexicon. Bonus vs chosen racial type
|
||||
// Focused Lexicon. Bonus vs chosen racial type //:: [PRC .35] Needs update for new racialtypes
|
||||
switch(nRace)
|
||||
{
|
||||
case RACIAL_TYPE_ABERRATION: nFeat = FEAT_FOCUSED_LEXICON_ABERRATION; break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user