Exalted update

Updated Vow of Poverty. Added Sanctify Ki Strike, Holy Strike, Fist of Heavens, Vow of Abstinence, Vow of Chastity & Gift of Faith.  (@fenac).  Turned off the Taunt & Parry skills.  Re-disabled AC & save bonuses from Tumble & Spellcraft.   Updated min() & max() to PRCmin() & PRCmax() to not conflict with similarly named NUI adjacent functions.  Set Point Blank Shot to 30' per PnP.  Added icon for Chosen of Evil.  Started work on Hidden Talent.  Created Psionics function cheatsheet.  Updated release archive.
This commit is contained in:
Jaysyn904
2025-01-29 22:46:38 -05:00
parent 370b29e917
commit e641b42f84
209 changed files with 1893 additions and 926 deletions

View File

@@ -334,7 +334,7 @@ void DispelMagicBestMod(object oTarget, int nCasterLevel)
{
int nExist = GetLocalInt(OBJECT_SELF, "CaptureMagic");
int nSpellLevel = StringToInt(Get2DACache("spells", "Innate", nEffectSpellID));
SetLocalInt(OBJECT_SELF, "CaptureMagic", max(nExist, nSpellLevel/2));
SetLocalInt(OBJECT_SELF, "CaptureMagic", PRCMax(nExist, nSpellLevel/2));
if (GetLevelByClass(CLASS_TYPE_NOCTUMANCER) >= 10)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectSpellImmunity(nEffectSpellID)), OBJECT_SELF, 60.0);
}
@@ -589,7 +589,7 @@ void DispelMagicAllMod(object oTarget, int nCasterLevel)
{
int nExist = GetLocalInt(OBJECT_SELF, "CaptureMagic");
int nSpellLevel = StringToInt(Get2DACache("spells", "Innate", nEffectSpellID));
SetLocalInt(OBJECT_SELF, "CaptureMagic", max(nExist, nSpellLevel/2));
SetLocalInt(OBJECT_SELF, "CaptureMagic", PRCMax(nExist, nSpellLevel/2));
if (GetLevelByClass(CLASS_TYPE_NOCTUMANCER) >= 10)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectSpellImmunity(nEffectSpellID)), OBJECT_SELF, 60.0);
}

View File

@@ -453,7 +453,7 @@ void CreateSpiritualWeapon(object oCaster, float fDuration, int nClass)
int iCasterLvL = PRCGetCasterLevel(oCaster);
int nBAB = GetBaseAttackBonus(oCaster);
int nAttNumber = 1+(nBAB / 4);
int nDamBonus = min(5, iCasterLvL / 3);
int nDamBonus = PRCMin(5, iCasterLvL / 3);
int nPenetr = iCasterLvL + SPGetPenetr();
int nStat = nClass == CLASS_TYPE_INVALID ?
GetAbilityModifier(ABILITY_CHARISMA, oCaster) ://:: if cast from items use charisma by default
@@ -804,7 +804,7 @@ void HandleSpiritualWeaponUnequipEvent()
int nCasterLevel = PRCGetCasterLevel(oCaster);
int nDuration = nCasterLevel;
int nPenetr = nCasterLevel + SPGetPenetr();
int nDamBonus = min(5, nCasterLevel / 3);
int nDamBonus = PRCMin(5, nCasterLevel / 3);
float fDuration = IntToFloat(nDuration);
// Log the event for debugging

View File

@@ -32,7 +32,7 @@ const int ACTION_USE_ITEM_TMI_LIMIT = 1500;
* @param b Another integer
* @return a iff a is greater than b, otherwise b
*/
int max(int a, int b);
int PRCMax(int a, int b);
/**
* Returns the lesser of the two values passed to it.
@@ -41,7 +41,7 @@ int max(int a, int b);
* @param b Another integer
* @return a iff a is lesser than b, otherwise b
*/
int min(int a, int b);
int PRCMin(int a, int b);
/**
* Returns the greater of the two values passed to it.
@@ -50,7 +50,7 @@ int min(int a, int b);
* @param b Another float
* @return a iff a is greater than b, otherwise b
*/
float fmax(float a, float b);
float PRCFmax(float a, float b);
/**
* Returns the lesser of the two values passed to it.
@@ -59,7 +59,7 @@ float fmax(float a, float b);
* @param b Another float
* @return a iff a is lesser than b, otherwise b
*/
float fmin(float a, float b);
float PRCFmin(float a, float b);
/**
* Takes a string in the standard hex number format (0x####) and converts it
@@ -172,29 +172,29 @@ location AddLocationToLocation(location lMaster, location lAdd);
* simple function to use the name of a item holding escape sequences that, though they will not compile,
* they can be interpreted at run time and produce rbg scales between 32 and 255 in increments.
* -- allows 3375 colors to be made.
* for example SendMessageToPC(pc,GetRGB(15,15,1)+ "Help, I'm on fire!") will produce yellow text.
* for example SendMessageToPC(pc,PRCGetRGB(15,15,1)+ "Help, I'm on fire!") will produce yellow text.
* more examples:
*
* GetRGB() := WHITE // no parameters, default is white
* GetRGB(15,15,1):= YELLOW
* GetRGB(15,5,1) := ORANGE
* GetRGB(15,1,1) := RED
* GetRGB(7,7,15) := BLUE
* GetRGB(1,15,1) := NEON GREEN
* GetRGB(1,11,1) := GREEN
* GetRGB(9,6,1) := BROWN
* GetRGB(11,9,11):= LIGHT PURPLE
* GetRGB(12,10,7):= TAN
* GetRGB(8,1,8) := PURPLE
* GetRGB(13,9,13):= PLUM
* GetRGB(1,7,7) := TEAL
* GetRGB(1,15,15):= CYAN
* GetRGB(1,1,15) := BRIGHT BLUE
* PRCGetRGB() := WHITE // no parameters, default is white
* PRCGetRGB(15,15,1):= YELLOW
* PRCGetRGB(15,5,1) := ORANGE
* PRCGetRGB(15,1,1) := RED
* PRCGetRGB(7,7,15) := BLUE
* PRCGetRGB(1,15,1) := NEON GREEN
* PRCGetRGB(1,11,1) := GREEN
* PRCGetRGB(9,6,1) := BROWN
* PRCGetRGB(11,9,11):= LIGHT PURPLE
* PRCGetRGB(12,10,7):= TAN
* PRCGetRGB(8,1,8) := PURPLE
* PRCGetRGB(13,9,13):= PLUM
* PRCGetRGB(1,7,7) := TEAL
* PRCGetRGB(1,15,15):= CYAN
* PRCGetRGB(1,1,15) := BRIGHT BLUE
*
* issues? contact genji@thegenji.com
* special thanks to ADAL-Miko and Rich Dersheimer in the bio forums.
*/
string GetRGB(int red = 15,int green = 15,int blue = 15);
string PRCGetRGB(int red = 15,int green = 15,int blue = 15);
/**
* Checks if any PCs (or optionally their NPC party members) are in the
@@ -362,7 +362,7 @@ string BooleanToString(int bool, int bTLK = FALSE);
*
* @param s The string to trim.
*/
string TrimString(string s);
string PRCTrimString(string s);
/**
* Compares the given two strings lexicographically.
@@ -584,13 +584,13 @@ const int ERROR_CODE_5_ONCE_MORE5 = -1;
* Function Definitions *
\**********************/
int max(int a, int b) {return (a > b ? a : b);}
int PRCMax(int a, int b) {return (a > b ? a : b);}
int min(int a, int b) {return (a < b ? a : b);}
int PRCMin(int a, int b) {return (a < b ? a : b);}
float fmax(float a, float b) {return (a > b ? a : b);}
float PRCFmax(float a, float b) {return (a > b ? a : b);}
float fmin(float a, float b) {return (a < b ? a : b);}
float PRCFmin(float a, float b) {return (a < b ? a : b);}
int HexToInt_old(string sHex)
{
@@ -721,7 +721,7 @@ location AddLocationToLocation(location lMaster, location lAdd)
string GetRGB(int red = 15,int green = 15,int blue = 15)
string PRCGetRGB(int red = 15,int green = 15,int blue = 15)
{
object coloringBook = GetObjectByTag("ColoringBook");
if (coloringBook == OBJECT_INVALID)
@@ -953,7 +953,7 @@ void ForceEquip(object oPC, object oItem, int nSlot, int nThCall = 0)
AssignCommand(oPC, ActionEquipItem(oItem, nSlot));
}
// Use a lenghtening delay in order to attempt handling lag and possible other interference. From 0.1s to 1s
fDelay = min(nThCall, 10) / 10.0f;
fDelay = PRCMin(nThCall, 10) / 10.0f;
}
// Loop
@@ -995,7 +995,7 @@ void ForceUnequip(object oPC, object oItem, int nSlot, int nThCall = 0)
AssignCommand(oPC, ActionUnequipItem(oItem));
// Ramp up the delay if the action is not getting through. Might let whatever is intefering finish
fDelay = min(nThCall, 10) / 10.0f;
fDelay = PRCMin(nThCall, 10) / 10.0f;
}
// The item has already been unequipped
else
@@ -1051,7 +1051,7 @@ string BooleanToString(int bool, int bTLK = FALSE)
(bool ? "True" : "False");
}
string TrimString(string s)
string PRCTrimString(string s)
{
int nCrop = 0;
string temp;
@@ -1105,7 +1105,7 @@ int StringCompare(string s1, string s2)
// Start comparing
int nT,
i = 0,
nMax = min(GetStringLength(s1), GetStringLength(s2));
nMax = PRCMin(GetStringLength(s1), GetStringLength(s2));
while(i < nMax)
{
// Get the difference between the values of i:th characters
@@ -1726,7 +1726,7 @@ void ForcePutDown(object oPC, object oItem, int nSlot, int nThCall = 0)
AssignCommand(oPC, ActionPutDownItem(oItem));
// Ramp up the delay if the action is not getting through. Might let whatever is intefering finish
fDelay = min(nThCall, 10) / 10.0f;
fDelay = PRCMin(nThCall, 10) / 10.0f;
}
// The item has already been unequipped
else

View File

@@ -204,7 +204,7 @@ int GetInvokerLevel(object oInvoker = OBJECT_SELF, int nSpecificClass = CLASS_TY
return 0;
if(nSpecificClass == CLASS_TYPE_DRAGON_SHAMAN)
nLevel = max(GetLevelByClass(nSpecificClass, oInvoker) - 4, 1); // Can't go below 1
nLevel = PRCMax(GetLevelByClass(nSpecificClass, oInvoker) - 4, 1); // Can't go below 1
else
nLevel = GetLevelByClass(nSpecificClass, oInvoker);
if(DEBUG) DoDebug("Invoker Class Level is: " + IntToString(nLevel));
@@ -256,7 +256,7 @@ int GetHighestInvokerLevel(object oCreature)
/* int GetHighestInvokerLevel(object oCreature)
{
return max(max(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetInvokerLevel(oCreature, GetClassByPosition(1, oCreature)) : 0,
return PRCMax(PRCMax(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetInvokerLevel(oCreature, GetClassByPosition(1, oCreature)) : 0,
GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID ? GetInvokerLevel(oCreature, GetClassByPosition(2, oCreature)) : 0
),
GetClassByPosition(3, oCreature) != CLASS_TYPE_INVALID ? GetInvokerLevel(oCreature, GetClassByPosition(3, oCreature)) : 0

View File

@@ -204,7 +204,7 @@ int GetIncarnumLevelForClass(int nSpecificClass, object oMeldshaper)
int GetHighestMeldshaperLevel(object oMeldshaper)
{
/**return max(max(GetClassByPosition(1, oMeldshaper) != CLASS_TYPE_INVALID ? GetMeldshaperLevel(oMeldshaper, GetClassByPosition(1, oMeldshaper), -1) : 0,
/**return PRCMax(PRCMax(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
@@ -354,7 +354,7 @@ int GetMaxShapeSoulmeldCount(object oMeldshaper, int nClass)
int nCon = GetAbilityScore(oMeldshaper, ABILITY_CONSTITUTION, TRUE)-10;
if (GetHasFeat(FEAT_UNDEAD_MELDSHAPER, oMeldshaper)) nCon = GetAbilityScore(oMeldshaper, ABILITY_WISDOM, TRUE)-10;
//Limited to Con score - 10 or class limit, whichever is less
nMax = min(nMax, nCon);
nMax = PRCMin(nMax, nCon);
//if (DEBUG) DoDebug("GetMaxShapeSoulmeldCount is "+IntToString(nMax));
return nMax;
@@ -856,7 +856,7 @@ void InvestEssentia(object oMeldshaper, int nMeld, int nEssentia)
}
int nClass = GetMeldShapedClass(oMeldshaper, nMeld);
// Special capacity of 1/2 class level
if (nMeld == MELD_SPINE_ENHANCEMENT) nEssentia = min(nEssentia, (GetLevelByClass(CLASS_TYPE_SPINEMELD_WARRIOR, oMeldshaper)/2));
if (nMeld == MELD_SPINE_ENHANCEMENT) nEssentia = PRCMin(nEssentia, (GetLevelByClass(CLASS_TYPE_SPINEMELD_WARRIOR, oMeldshaper)/2));
else if (nEssentia > GetMaxEssentiaCapacity(oMeldshaper, nClass, nMeld)) nEssentia = GetMaxEssentiaCapacity(oMeldshaper, nClass, nMeld);
// Can't invest more than you have
if (nEssentia > GetTotalUsableEssentia(oMeldshaper)) nEssentia = GetTotalUsableEssentia(oMeldshaper);
@@ -1176,7 +1176,7 @@ int GetMaxEssentiaCapacityFeat(object oMeldshaper)
else if (nHD >= 6) nMax = 2;
if (GetLocalInt(oMeldshaper, "DivineSoultouch")) nMax += 1;
if (GetLocalInt(oMeldshaper, "IncandescentOverload")) nMax += max(GetAbilityModifier(ABILITY_CHARISMA, oMeldshaper), 1);
if (GetLocalInt(oMeldshaper, "IncandescentOverload")) nMax += PRCMax(GetAbilityModifier(ABILITY_CHARISMA, oMeldshaper), 1);
if (GetHasFeat(FEAT_IMPROVED_ESSENTIA_CAPACITY, oMeldshaper)) nMax += 1;
// Don't allow more than they have

View File

@@ -188,15 +188,15 @@ int GetArmourCheckPenaltyReduction(object oItem)
int nACPenalty = GetItemArmourCheckPenalty(oItem);
if(nMaterial & PRC_CRAFT_FLAG_MASTERWORK)
{
nBonus = min(1, nACPenalty);
nBonus = PRCMin(1, nACPenalty);
}
if(nMaterial & PRC_CRAFT_FLAG_DARKWOOD)
{
nBonus = min(2, nACPenalty);
nBonus = PRCMin(2, nACPenalty);
}
if(nMaterial & PRC_CRAFT_FLAG_MITHRAL)
{
nBonus = min(3, nACPenalty);
nBonus = PRCMin(3, nACPenalty);
}
}
return nBonus;
@@ -986,7 +986,7 @@ int CheckGolemPrereq(object oPC, int nLine, int bEpic)
int nLevel;
int j = 0;
//replace the arti level check later when PrCs are added
int nCasterLevel = max(max(max(GetLevelByTypeArcane(oPC), GetLevelByTypeDivine(oPC)), GetLevelByClass(CLASS_TYPE_ARTIFICER, oPC) + 2), GetLocalInt(oPC, "InvokerLevel"));
int nCasterLevel = PRCMax(PRCMax(PRCMax(GetLevelByTypeArcane(oPC), GetLevelByTypeDivine(oPC)), GetLevelByClass(CLASS_TYPE_ARTIFICER, oPC) + 2), GetLocalInt(oPC, "InvokerLevel"));
int nManifesterLevel = GetManifesterLevel(oPC);
int nTemp, nLength, nPosition;
int bArtificer = (GetLevelByClass(CLASS_TYPE_ARTIFICER, oPC) > 0);
@@ -999,7 +999,7 @@ int CheckGolemPrereq(object oPC, int nLine, int bEpic)
else if(sPropertyType == "P")
nLevel = nManifesterLevel;
else
nLevel = max(nCasterLevel, nManifesterLevel);
nLevel = PRCMax(nCasterLevel, nManifesterLevel);
if(!bEpic && Get2DACache(sFile, "Epic", nLine) == "1")
return FALSE;
else if(nLevel < StringToInt(Get2DACache(sFile, "Level", nLine)))
@@ -1051,7 +1051,7 @@ int CheckPrereq(object oPC, int nLine, int bEpic, string sFile, struct itemvars
int nLevel;
int j = 0;
//replace the arti level check later when PrCs are added
int nCasterLevel = max(max(max(GetLevelByTypeArcane(oPC), GetLevelByTypeDivine(oPC)), GetLevelByClass(CLASS_TYPE_ARTIFICER, oPC) + 2), GetLocalInt(oPC, "InvokerLevel"));
int nCasterLevel = PRCMax(PRCMax(PRCMax(GetLevelByTypeArcane(oPC), GetLevelByTypeDivine(oPC)), GetLevelByClass(CLASS_TYPE_ARTIFICER, oPC) + 2), GetLocalInt(oPC, "InvokerLevel"));
nCasterLevel += GetLevelByClass(CLASS_TYPE_BATTLESMITH) * 3;
nCasterLevel += GetLevelByClass(CLASS_TYPE_IRONSOUL_FORGEMASTER) * 3;
int nManifesterLevel = GetManifesterLevel(oPC);
@@ -1064,7 +1064,7 @@ int CheckPrereq(object oPC, int nLine, int bEpic, string sFile, struct itemvars
else if(sPropertyType == "P")
nLevel = nManifesterLevel;
else
nLevel = max(nCasterLevel, nManifesterLevel);
nLevel = PRCMax(nCasterLevel, nManifesterLevel);
if (DEBUG) DoDebug("CheckPrereq: "+GetName(oPC)+" nLevel "+IntToString(nLevel)+" PropType "+sPropertyType+" Epic "+IntToString(bEpic)+" sFile "+sFile);
@@ -1187,7 +1187,7 @@ struct itemvars GetItemVars(object oPC, object oItem, string sFile, int bEpic =
int nEnhancement;
int nSpellPattern;
int nSpell1, nSpell2, nSpell3, nSpellOR1, nSpellOR2;
int nCasterLevel = max(GetLevelByTypeArcane(oPC), GetLevelByTypeDivine(oPC));
int nCasterLevel = PRCMax(GetLevelByTypeArcane(oPC), GetLevelByTypeDivine(oPC));
int nManifesterLevel = GetManifesterLevel(oPC);
int nLevel;
int nFileEnd = PRCGetFileEnd(sFile);

View File

@@ -1560,6 +1560,12 @@ const int FEAT_SANCTIFY_MARTIAL_SICKLE = 3169;
const int FEAT_SANCTIFY_MARTIAL_MINDBLADE = 3623;
const int FEAT_SANCTIFY_MARTIAL_WHIP = 3596;
const int FEAT_SANCTIFY_MARTIAL_TRIDENT = 3597;
const int FEAT_SANCTIFYKISTRIKE = 26002;
const int FEAT_HOLYKISTRIKE = 26003;
const int FEAT_FISTOFHEAVENS = 26004;
const int FEAT_VOWABSTINENCE = 26005;
const int FEAT_VOWCHASTITY = 26006;
const int FEAT_GIFTOFFAITH = 26007;
//heartwarder
const int FEAT_CHARISMA_INC1 = 3230;
@@ -2493,7 +2499,13 @@ const int FEAT_WEAPON_OF_CHOICE_MINDBLADE = 3622;
const int FEAT_MIND_CLEAVE = 24414;
//Psionic Feats
//:: Psionic Feats
const int FEAT_AUGMENT_PSIONICS_QUICKSELECTS = 3550;
const int FEAT_AUGMENT_QUICKSELECTS_2 = 3563;
const int FEAT_AUGMENT_PSIONICS_DIGITS_0_4 = 3551;
const int FEAT_AUGMENT_PSIONICS_DIGITS_5_9 = 3552;
const int FEAT_AUGMENT_PSIONICS_TENS = 3553;
const int FEAT_MENTAL_RESISTANCE = 4812;
const int FEAT_HOSTILE_MIND = 4813;
const int FEAT_FORCE_OF_WILL = 4814;
@@ -5862,10 +5874,60 @@ const int FEAT_SWIFT_WING_SPELLCASTING_VASSAL = 19588;
const int FEAT_WARPRIEST_SPELLCASTING_VASSAL = 19589;
//:: No spellcasting or invoking marker feats
const int FEAT_ASMODEUS_SPELLCASTING_NONE = 19590;
const int FEAT_TIAMAT_SPELLCASTING_NONE = 19591;
const int FEAT_DSONG_SPELLCASTING_NONE = 19592;
const int FEAT_OLLAM_SPELLCASTING_NONE = 19593;
const int FEAT_ASMODEUS_SPELLCASTING_NONE = 19590;
const int FEAT_TIAMAT_SPELLCASTING_NONE = 19591;
const int FEAT_DSONG_SPELLCASTING_NONE = 19592;
const int FEAT_OLLAM_SPELLCASTING_NONE = 19593;
//:: PRC8 Hidden Talent Feats
const int FEAT_HIDDEN_TALENT_BIOFEEDBACK = 25901;
const int FEAT_HIDDEN_TALENT_BITE_WOLF = 25902;
const int FEAT_HIDDEN_TALENT_BOLT = 25903;
const int FEAT_HIDDEN_TALENT_BURST = 25904;
const int FEAT_HIDDEN_TALENT_CALLTOMIND = 25905;
const int FEAT_HIDDEN_TALENT_CALL_WEAPONRY = 25906;
const int FEAT_HIDDEN_TALENT_CHAMELEON = 25907;
const int FEAT_HIDDEN_TALENT_CLAWS_BEAST = 25908;
const int FEAT_HIDDEN_TALENT_COMPRESSION = 25909;
const int FEAT_HIDDEN_TALENT_CONCEALTHOUGHT = 25910;
const int FEAT_HIDDEN_TALENT_CREATESOUND = 25911;
const int FEAT_HIDDEN_TALENT_CRYSTALSHARD = 25912;
const int FEAT_HIDDEN_TALENT_DAZE = 25913;
const int FEAT_HIDDEN_TALENT_DECELERATION = 25914;
const int FEAT_HIDDEN_TALENT_DEFPRECOG = 25915;
const int FEAT_HIDDEN_TALENT_DEMORALIZE = 25916;
const int FEAT_HIDDEN_TALENT_DISABLE = 25917;
const int FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH = 25918;
const int FEAT_HIDDEN_TALENT_DISTRACT = 25919;
const int FEAT_HIDDEN_TALENT_ELFSIGHT = 25920;
const int FEAT_HIDDEN_TALENT_EMPATHY = 25921;
const int FEAT_HIDDEN_TALENT_EMPTYMIND = 25922;
const int FEAT_HIDDEN_TALENT_ENERGYRAY = 25923;
const int FEAT_HIDDEN_TALENT_ENTANGLE = 25924;
const int FEAT_HIDDEN_TALENT_EXPANSION = 25925;
const int FEAT_HIDDEN_TALENT_FARHAND = 25926;
const int FEAT_HIDDEN_TALENT_FORCESCREEN = 25927;
const int FEAT_HIDDEN_TALENT_GREASE = 25928;
const int FEAT_HIDDEN_TALENT_HAMMER = 25929;
const int FEAT_HIDDEN_TALENT_INERTIALARMOUR = 25930;
const int FEAT_HIDDEN_TALENT_MATTERAGITATION = 25931;
const int FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW = 25932;
const int FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON = 25933;
const int FEAT_HIDDEN_TALENT_MINDTHRUST = 25934;
const int FEAT_HIDDEN_TALENT_MYLIGHT = 25935;
const int FEAT_HIDDEN_TALENT_OFFPRECOG = 25936;
const int FEAT_HIDDEN_TALENT_OFFPRESC = 25937;
const int FEAT_HIDDEN_TALENT_PREVENOM = 25938;
const int FEAT_HIDDEN_TALENT_PREVENOM_WEAPON = 25939;
const int FEAT_HIDDEN_TALENT_SKATE = 25940;
const int FEAT_HIDDEN_TALENT_STOMP = 25941;
const int FEAT_HIDDEN_TALENT_SYNESTHETE = 25942;
const int FEAT_HIDDEN_TALENT_TELEMPATHICPRO = 25943;
const int FEAT_HIDDEN_TALENT_THICKSKIN = 25944;
const int FEAT_HIDDEN_TALENT_VIGOR = 25945;
const int FEAT_HIDDEN_TALENT_GRIP_IRON = 25946;
//:: Test void

View File

@@ -418,7 +418,7 @@ void ApplyBreath(struct breath BreathUsed, location lTargetArea, int bLinger = F
if (BreathUsed.nDCStat >= 10)
nSaveDC = BreathUsed.nDCStat;
else
nSaveDC = 10 + max(GetAbilityModifier(BreathUsed.nDCStat), 0) + BreathUsed.nOtherDCMod;
nSaveDC = 10 + PRCMax(GetAbilityModifier(BreathUsed.nDCStat), 0) + BreathUsed.nOtherDCMod;
//Set up variables that depend on damage type
switch (BreathUsed.nDamageType)

View File

@@ -981,7 +981,7 @@ int GetAttacks(int iBAB, int iHD)
// this is the Bioware implementation, which includes BAB from other classes and caps at 6
int GetMonkAttacks(int iBAB, int iHD)
{
return ((iHD > 20) ? min(6,((iBAB - (iHD-17)/2)/3 +1)) : min(6,((iBAB-1) / 3 +1)));
return ((iHD > 20) ? PRCMin(6,((iBAB - (iHD-17)/2)/3 +1)) : PRCMin(6,((iBAB-1) / 3 +1)));
}
int GetPnPMonkAttacks(int iMonkLevel)
@@ -3038,7 +3038,7 @@ int GetDefenderAC(object oDefender, object oAttacker, int bIsTouchAttack = FALSE
// Wilders get to add cha bonus to touch attacks only, but cannot exceed normal AC that way
if(GetHasFeat(FEAT_WILDER_ELUDE_TOUCH, oDefender))
iAC = min(iAC + GetAbilityModifier(ABILITY_CHARISMA, oDefender), nNormalAC);
iAC = PRCMin(iAC + GetAbilityModifier(ABILITY_CHARISMA, oDefender), nNormalAC);
}
//if (DEBUG) DoDebug("GetDefenderAC: End Section #5");
return iAC;
@@ -4880,7 +4880,7 @@ DoDebug("GetWeaponBonusDamage() found onhitcastspell with Spell type: " + IntToS
iDamage = iDamageDarkfire + iDamageFlameWeapon;
else
// otherwise we take the maximum
iDamage = max(iDamageDarkfire, iDamageFlameWeapon);
iDamage = PRCMax(iDamageDarkfire, iDamageFlameWeapon);
if(iDamage)
{
// now either (if stacking) add the spell's fire damage to any other fire damage that is already on the weapon,
@@ -4888,7 +4888,7 @@ DoDebug("GetWeaponBonusDamage() found onhitcastspell with Spell type: " + IntToS
if(bStack)
iDamage += GetDamageByConstant(weapBonusDam.dam_Fire, TRUE);
else
iDamage = max(GetDamageByConstant(weapBonusDam.dam_Fire, TRUE), iDamage);
iDamage = PRCMax(GetDamageByConstant(weapBonusDam.dam_Fire, TRUE), iDamage);
if(iDamage > 20) iDamage = 20; // make sure that the damage does not exceed 20
// convert integer damage back to DamageBonusConstant

View File

@@ -73,7 +73,7 @@ void CheckForPnPHolyAvenger(object oItem);
void _prc_inc_itmrstr_ApplySpeedIncrease(object oPC)
{
// Get target speed modification value. Limit to 99, since that's the effect constructor maximum value
int nSpeedMod = min(99, GetLocalInt(oPC, PLAYER_SPEED_INCREASE));
int nSpeedMod = PRCMin(99, GetLocalInt(oPC, PLAYER_SPEED_INCREASE));
object oSkin = GetPCSkin(oPC);
AssignCommand(oSkin, _prc_inc_itmrstr_ApplySpeedModification(oPC, EFFECT_TYPE_MOVEMENT_SPEED_INCREASE, nSpeedMod));

View File

@@ -193,7 +193,7 @@ void DetectAlignmentRound(int nRound, location lLoc, int nGoodEvil, int nLawChao
{
//presence/absence
//ApplyEffectDetectAuraOnObject(AURA_STRENGTH_MODERATE, oCaster, nBeamVFX);
FloatingTextStringOnCreature(GetRGB(15,5,5) + GetStringByStrRef(16832001)// "You detect the presense of"
FloatingTextStringOnCreature(PRCGetRGB(15,5,5) + GetStringByStrRef(16832001)// "You detect the presense of"
+ " " + (nLawChaos != -1 ? // "good" and "evil" work as both substantives and adjectives, but not so for "lawful" and "chaotic"
(nLawChaos == ALIGNMENT_LAWFUL ?
GetStringByStrRef(4957) // "law"
@@ -253,7 +253,7 @@ void DetectAlignmentRound(int nRound, location lLoc, int nGoodEvil, int nLawChao
else if(nRound >= 3)
{
if(nRound == 3)
ActionDoCommand(FloatingTextStringOnCreature(GetRGB(15,16-(nStrength*3),16-(nStrength*3)) + GetName(oTest) + " " + GetStringByStrRef(16832044)/*"feels"*/ + " "+GetNounForStrength(nStrength)+" "+sAura+".", oCaster, FALSE));
ActionDoCommand(FloatingTextStringOnCreature(PRCGetRGB(15,16-(nStrength*3),16-(nStrength*3)) + GetName(oTest) + " " + GetStringByStrRef(16832044)/*"feels"*/ + " "+GetNounForStrength(nStrength)+" "+sAura+".", oCaster, FALSE));
//strength & location
ActionDoCommand(ApplyEffectDetectAuraOnObject(nStrength, oTest, nBeamVFX));
}
@@ -264,7 +264,7 @@ void DetectAlignmentRound(int nRound, location lLoc, int nGoodEvil, int nLawChao
{
//reporting
//ApplyEffectDetectAuraOnObject(nStrongestAura, oCaster, nBeamVFX);
FloatingTextStringOnCreature(GetRGB(15,16-(nStrongestAura*3),16-(nStrongestAura*3)) + GetStringByStrRef(16832045)/*"You detected"*/ + " " + IntToString(nAuraCount) + " " + GetNounForStrength(nStrongestAura) + " " + sAura + " " + GetStringByStrRef(16832046)/*"auras"*/ + ".", oCaster, FALSE);
FloatingTextStringOnCreature(PRCGetRGB(15,16-(nStrongestAura*3),16-(nStrongestAura*3)) + GetStringByStrRef(16832045)/*"You detected"*/ + " " + IntToString(nAuraCount) + " " + GetNounForStrength(nStrongestAura) + " " + sAura + " " + GetStringByStrRef(16832046)/*"auras"*/ + ".", oCaster, FALSE);
}
//ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE, 1.0, 6.0);
@@ -371,7 +371,7 @@ void DetectMagicAura(int nRound, location lLoc, int nBeamVFX, float fDist)
else if(nRound >= 3)
{
if(nRound == 3)
ActionDoCommand(FloatingTextStringOnCreature(GetRGB(15,16-(nStrength*3),16-(nStrength*3)) + GetName(oTest) + " feels affected by "+GetNounForStrength(nStrength)+" magic.", oCaster, FALSE));
ActionDoCommand(FloatingTextStringOnCreature(PRCGetRGB(15,16-(nStrength*3),16-(nStrength*3)) + GetName(oTest) + " feels affected by "+GetNounForStrength(nStrength)+" magic.", oCaster, FALSE));
//strength & location
ActionDoCommand(ApplyEffectDetectAuraOnObject(nStrength, oTest, nBeamVFX));
}
@@ -382,7 +382,7 @@ void DetectMagicAura(int nRound, location lLoc, int nBeamVFX, float fDist)
{
//reporting
//ApplyEffectDetectAuraOnObject(nStrongestAura, oCaster, nBeamVFX);
FloatingTextStringOnCreature(GetRGB(15,16-(nStrongestAura*3),16-(nStrongestAura*3)) + GetStringByStrRef(16832045)/*"You detected"*/ + " " + IntToString(nAuraCount) + " " + GetNounForStrength(nStrongestAura) + " magical " + GetStringByStrRef(16832046)/*"auras"*/ + ".", oCaster, FALSE);
FloatingTextStringOnCreature(PRCGetRGB(15,16-(nStrongestAura*3),16-(nStrongestAura*3)) + GetStringByStrRef(16832045)/*"You detected"*/ + " " + IntToString(nAuraCount) + " " + GetNounForStrength(nStrongestAura) + " magical " + GetStringByStrRef(16832046)/*"auras"*/ + ".", oCaster, FALSE);
}
//ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE, 1.0, 6.0);
@@ -475,7 +475,7 @@ void DetectRaceAura(int nRound, int nRace, location lLoc, int nBeamVFX, float fD
else if(nRound >= 3)
{
if(nRound == 3)
ActionDoCommand(FloatingTextStringOnCreature(GetRGB(15,16-(nStrength*3),16-(nStrength*3)) + GetName(oTest) + " finds the greatest aura is "+GetNounForStrength(nStrength)+".", oCaster, FALSE));
ActionDoCommand(FloatingTextStringOnCreature(PRCGetRGB(15,16-(nStrength*3),16-(nStrength*3)) + GetName(oTest) + " finds the greatest aura is "+GetNounForStrength(nStrength)+".", oCaster, FALSE));
//strength & location
ActionDoCommand(ApplyEffectDetectAuraOnObject(nStrength, oTest, nBeamVFX));
}
@@ -486,7 +486,7 @@ void DetectRaceAura(int nRound, int nRace, location lLoc, int nBeamVFX, float fD
{
//reporting
//ApplyEffectDetectAuraOnObject(nStrongestAura, oCaster, nBeamVFX);
FloatingTextStringOnCreature(GetRGB(15,16-(nStrongestAura*3),16-(nStrongestAura*3)) + GetStringByStrRef(16832045)/*"You detected"*/ + " " + IntToString(nAuraCount) + " " + GetNounForStrength(nStrongestAura) + " racial " + GetStringByStrRef(16832046)/*"auras"*/ + ".", oCaster, FALSE);
FloatingTextStringOnCreature(PRCGetRGB(15,16-(nStrongestAura*3),16-(nStrongestAura*3)) + GetStringByStrRef(16832045)/*"You detected"*/ + " " + IntToString(nAuraCount) + " " + GetNounForStrength(nStrongestAura) + " racial " + GetStringByStrRef(16832046)/*"auras"*/ + ".", oCaster, FALSE);
}
//ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE, 1.0, 6.0);

View File

@@ -174,7 +174,7 @@ void ScryMain(object oPC, object oTarget)
{
// Caster level check or the Divination fails.
// Max of 10
if(max(10, GetManifesterLevel(oTarget)) + 13 > nCasterLevel + d20())
if(PRCMax(10, GetManifesterLevel(oTarget)) + 13 > nCasterLevel + d20())
{
FloatingTextStringOnCreature(GetName(oTarget) + " has Escape Detection active.", oPC, FALSE);
return;

View File

@@ -1980,7 +1980,7 @@ void UpdateStoredTemplateInfo(object oShifter, int nShifterType, int nStart = 0)
int nArraySize = GetNumberOfStoredTemplates(oShifter, nShifterType);
if(nStart < nArraySize)
{
int nEnd = min(nStart + CHUNK_SIZE, nArraySize);
int nEnd = PRCMin(nStart + CHUNK_SIZE, nArraySize);
_UpdateStoredTemplateInfo(oShifter, nShifterType, nStart, nEnd);
if(nEnd < nArraySize)
DelayCommand(0.0f, UpdateStoredTemplateInfo(oShifter, nShifterType, nEnd));

View File

@@ -85,7 +85,7 @@ void _ForceEquipSkin(object oPC, object oSkin, int nThCall = 0)
}
}
// Use a lenghtening delay in order to attempt handling lag and possible other interference. From 0.1s to 1s
fDelay = (nThCall < 10 ? nThCall : 10) / 10.0f; // yes this is the same as min(nThCall, 10)
fDelay = (nThCall < 10 ? nThCall : 10) / 10.0f; // yes this is the same as PRCMin(nThCall, 10)
}
// Loop

View File

@@ -197,17 +197,25 @@ const int IP_CONST_FEAT_SPRINGATTACK = 258;
const int IP_CONST_FEAT_EVASION = 386;
const int IP_CONST_FEAT_IMPEVASION = 387;
const int IP_CONST_FEAT_GREAT_CLEAVE = 260;
const int IP_CONST_FEAT_PSIONIC_FOCUS = 259;
const int IP_CONST_FEAT_IMPROVED_INIT = 261;
const int IP_CONST_FEAT_BLOODED = 270;
const int IP_CONST_FEAT_POWER_ATTACK_SINGLE_RADIAL = 252;
const int IP_CONST_FEAT_POWER_ATTACK_FIVES_RADIAL = 253;
const int IP_CONST_FEAT_PRC_POWER_ATTACK_QUICKS_RADIAL = 262;
const int IP_CONST_FEAT_POWER_ATTACK_SINGLE_RADIAL = 252;
const int IP_CONST_FEAT_POWER_ATTACK_FIVES_RADIAL = 253;
const int IP_CONST_FEAT_PRC_POWER_ATTACK_QUICKS_RADIAL = 262;
const int IP_CONST_FEAT_TELEPORT_MANAGEMENT_RADIAL = 263;
const int IP_CONST_FEAT_TELEPORT_MANAGEMENT_RADIAL = 263;
const int IP_CONST_FEAT_EPIC_REST = 399;
//:: Psionic System Feats
const int IP_CONST_FEAT_PSIONIC_FOCUS = 259;
const int IP_CONST_FEAT_AUGMENT_PSIONICS_QUICKSELECTS = 584;
const int IP_CONST_FEAT_AUGMENT_PSIONICS_DIGITS_0_4 = 585;
const int IP_CONST_FEAT_AUGMENT_PSIONICS_DIGITS_5_9 = 586;
const int IP_CONST_FEAT_AUGMENT_PSIONICS_TENS = 587;
const int IP_CONST_FEAT_AUGMENT_QUICKSELECTS_2 = 586;
const int IP_CONST_FEAT_EPIC_REST = 399;
//:: PnP Weapon Feats
const int IP_CONST_FEAT_WEAPON_PROFICIENCY_SHORTSWORD = 4601;

View File

@@ -183,7 +183,7 @@ int _prc_inc_GetItemACBonus(object oItem)
while(GetIsItemPropertyValid(iProp))
{
if(GetItemPropertyType(iProp) == ITEM_PROPERTY_AC_BONUS && GetItemPropertyDurationType(iProp) == DURATION_TYPE_PERMANENT)
nArmorBonus = max(nArmorBonus, GetItemPropertyCostTableValue(iProp)); //TODO: pick the biggest? the first? stack them?
nArmorBonus = PRCMax(nArmorBonus, GetItemPropertyCostTableValue(iProp)); //TODO: pick the biggest? the first? stack them?
iProp = GetNextItemProperty(oItem);
}
return nArmorBonus;
@@ -238,18 +238,18 @@ struct _prc_inc_ac_info_struct _prc_inc_ACInfo(object oTemplate)
ac_info.nNaturalBonus = GetItemACValue(GetItemInSlot(INVENTORY_SLOT_NECK, oTemplate));
ac_info.nDeflectionBonus = GetItemACValue(GetItemInSlot(INVENTORY_SLOT_HEAD, oTemplate));
ac_info.nDeflectionBonus = max(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTemplate)));
ac_info.nDeflectionBonus = max(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CLOAK, oTemplate)));
ac_info.nDeflectionBonus = max(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oTemplate)));
ac_info.nDeflectionBonus = max(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_LEFTRING, oTemplate)));
ac_info.nDeflectionBonus = max(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_BELT, oTemplate)));
ac_info.nDeflectionBonus = max(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_ARROWS, oTemplate)));
ac_info.nDeflectionBonus = max(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_BULLETS, oTemplate)));
ac_info.nDeflectionBonus = max(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_BOLTS, oTemplate)));
ac_info.nDeflectionBonus = max(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTemplate)));
ac_info.nDeflectionBonus = max(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTemplate)));
ac_info.nDeflectionBonus = max(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTemplate)));
ac_info.nDeflectionBonus = max(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oTemplate)));
ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTemplate)));
ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CLOAK, oTemplate)));
ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oTemplate)));
ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_LEFTRING, oTemplate)));
ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_BELT, oTemplate)));
ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_ARROWS, oTemplate)));
ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_BULLETS, oTemplate)));
ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_BOLTS, oTemplate)));
ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTemplate)));
ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTemplate)));
ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTemplate)));
ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oTemplate)));
object oOffHandItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTemplate);
ac_info.nShieldBase = 0;
@@ -269,7 +269,7 @@ struct _prc_inc_ac_info_struct _prc_inc_ACInfo(object oTemplate)
ac_info.nShieldBonus = GetItemACValue(oOffHandItem) - ac_info.nShieldBase;
break;
default: //A weapon
ac_info.nDeflectionBonus = max(ac_info.nDeflectionBonus, GetItemACValue(oOffHandItem));
ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(oOffHandItem));
break;
}
@@ -277,11 +277,11 @@ struct _prc_inc_ac_info_struct _prc_inc_ACInfo(object oTemplate)
switch (GetBaseItemType(oArmsItem))
{
case BASE_ITEM_BRACER:
ac_info.nShieldBonus = max(ac_info.nShieldBonus, GetItemACValue(oArmsItem));
ac_info.nShieldBonus = PRCMax(ac_info.nShieldBonus, GetItemACValue(oArmsItem));
break;
case BASE_ITEM_GLOVES:
default:
ac_info.nDeflectionBonus = max(ac_info.nDeflectionBonus, GetItemACValue(oArmsItem));
ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(oArmsItem));
break;
}
@@ -296,7 +296,7 @@ struct _prc_inc_ac_info_struct _prc_inc_ACInfo(object oTemplate)
if (ac_info.nShieldBonus > 20)
ac_info.nShieldBonus = 20;
ac_info.nDEXBonus = min(GetAbilityModifier(ABILITY_DEXTERITY, oTemplate), _prc_inc_GetArmorMaxDEXBonus(oArmorItem));
ac_info.nDEXBonus = PRCMin(GetAbilityModifier(ABILITY_DEXTERITY, oTemplate), _prc_inc_GetArmorMaxDEXBonus(oArmorItem));
//TODO: make sure this isn't < 0?
return ac_info;
@@ -416,43 +416,43 @@ int _prc_inc_shifting_ShifterLevelRequirement(object oTemplate)
// Size tests
if(nSize >= CREATURE_SIZE_HUGE)
nLevelRequired = max(nLevelRequired, 7);
nLevelRequired = PRCMax(nLevelRequired, 7);
if(nSize == CREATURE_SIZE_LARGE)
nLevelRequired = max(nLevelRequired, 3);
nLevelRequired = PRCMax(nLevelRequired, 3);
if(nSize == CREATURE_SIZE_MEDIUM)
nLevelRequired = max(nLevelRequired, 1);
nLevelRequired = PRCMax(nLevelRequired, 1);
if(nSize == CREATURE_SIZE_SMALL)
nLevelRequired = max(nLevelRequired, 1);
nLevelRequired = PRCMax(nLevelRequired, 1);
if(nSize <= CREATURE_SIZE_TINY)
nLevelRequired = max(nLevelRequired, 3);
nLevelRequired = PRCMax(nLevelRequired, 3);
// Type tests
if(nRacialType == RACIAL_TYPE_OUTSIDER)
nLevelRequired = max(nLevelRequired, 9);
nLevelRequired = PRCMax(nLevelRequired, 9);
if(nRacialType == RACIAL_TYPE_ELEMENTAL)
nLevelRequired = max(nLevelRequired, 9);
nLevelRequired = PRCMax(nLevelRequired, 9);
if(nRacialType == RACIAL_TYPE_CONSTRUCT)
nLevelRequired = max(nLevelRequired, 8);
nLevelRequired = PRCMax(nLevelRequired, 8);
if(nRacialType == RACIAL_TYPE_UNDEAD)
nLevelRequired = max(nLevelRequired, 8);
nLevelRequired = PRCMax(nLevelRequired, 8);
if(nRacialType == RACIAL_TYPE_DRAGON)
nLevelRequired = max(nLevelRequired, 7);
nLevelRequired = PRCMax(nLevelRequired, 7);
if(nRacialType == RACIAL_TYPE_ABERRATION)
nLevelRequired = max(nLevelRequired, 6);
nLevelRequired = PRCMax(nLevelRequired, 6);
if(nRacialType == RACIAL_TYPE_OOZE)
nLevelRequired = max(nLevelRequired, 6);
nLevelRequired = PRCMax(nLevelRequired, 6);
if(nRacialType == RACIAL_TYPE_MAGICAL_BEAST)
nLevelRequired = max(nLevelRequired, 5);
nLevelRequired = PRCMax(nLevelRequired, 5);
if(nRacialType == RACIAL_TYPE_GIANT)
nLevelRequired = max(nLevelRequired, 4);
nLevelRequired = PRCMax(nLevelRequired, 4);
if(nRacialType == RACIAL_TYPE_VERMIN)
nLevelRequired = max(nLevelRequired, 4);
nLevelRequired = PRCMax(nLevelRequired, 4);
if(nRacialType == RACIAL_TYPE_BEAST)
nLevelRequired = max(nLevelRequired, 3);
nLevelRequired = PRCMax(nLevelRequired, 3);
if(nRacialType == RACIAL_TYPE_ANIMAL)
nLevelRequired = max(nLevelRequired, 2);
nLevelRequired = PRCMax(nLevelRequired, 2);
if(nRacialType == RACIAL_TYPE_HUMANOID_MONSTROUS)
nLevelRequired = max(nLevelRequired, 2);
nLevelRequired = PRCMax(nLevelRequired, 2);
if(nRacialType == RACIAL_TYPE_DWARF ||
nRacialType == RACIAL_TYPE_ELF ||
nRacialType == RACIAL_TYPE_GNOME ||
@@ -463,7 +463,7 @@ int _prc_inc_shifting_ShifterLevelRequirement(object oTemplate)
nRacialType == RACIAL_TYPE_HUMANOID_ORC ||
nRacialType == RACIAL_TYPE_HUMANOID_REPTILIAN
)
nLevelRequired = max(nLevelRequired, 1);
nLevelRequired = PRCMax(nLevelRequired, 1);
return nLevelRequired;
}

View File

@@ -264,7 +264,7 @@ int SpellfireDrainItem(object oPC, object oItem, int bCharged = TRUE, int bSingl
int nCharges = GetItemCharges(oItem);
if(nCharges) //charged item
{
nExpend = min(min(nCharges, nCap), nExpend); //capped by charges and capacity
nExpend = PRCMin(PRCMin(nCharges, nCap), nExpend); //capped by charges and capacity
SetItemCharges(oItem, nCharges - nExpend); //will destroy item if all charges drained
AddSpellfireLevels(oPC, nExpend); //adds 1 level/charge
return TRUE;
@@ -307,7 +307,7 @@ int SpellfireDrainItem(object oPC, object oItem, int bCharged = TRUE, int bSingl
(nBase == BASE_ITEM_ENCHANTED_SCROLL)
)
{
nExpend = min(min(nStack, nCap), nExpend); //capped by charges and capacity
nExpend = PRCMin(PRCMin(nStack, nCap), nExpend); //capped by charges and capacity
if(nExpend == nStack)
DestroyObject(oItem);
else

View File

@@ -2898,11 +2898,11 @@ int GetAlternativeCasterLevel(object oPC, int nLevel)
nLevel += GetLevelByClass(CLASS_TYPE_IRONSOUL_FORGEMASTER) * 3;
if(GetLocalInt(oPC, "UsingImbueItem"))
{
nLevel = max(GetLocalInt(oPC, "InvokerLevel"), nLevel);
nLevel = PRCMax(GetLocalInt(oPC, "InvokerLevel"), nLevel);
}
if(GetLocalInt(oPC, "ArtificerCrafting"))
{
nLevel = max(GetLevelByClass(CLASS_TYPE_ARTIFICER, oPC), nLevel);
nLevel = PRCMax(GetLevelByClass(CLASS_TYPE_ARTIFICER, oPC), nLevel);
}
return nLevel;
}

View File

@@ -1145,9 +1145,57 @@ object IPGetTargetedOrEquippedMeleeWeapon()
}
object IPGetTargetedOrEquippedArmor(int bAllowShields = FALSE)
{
object oTarget = PRCGetSpellTargetObject();
// If the target is a valid item
if (GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM)
{
// Check if the item is armor
if (GetBaseItemType(oTarget) == BASE_ITEM_ARMOR)
{
return oTarget;
}
// Check if the item is a shield and shields are allowed
if (bAllowShields && (GetBaseItemType(oTarget) == BASE_ITEM_LARGESHIELD ||
GetBaseItemType(oTarget) == BASE_ITEM_SMALLSHIELD ||
GetBaseItemType(oTarget) == BASE_ITEM_TOWERSHIELD))
{
return oTarget;
}
return OBJECT_INVALID;
}
// If the target is a creature
if (GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_CREATURE)
{
// Check the equipped armor
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget);
if (GetIsObjectValid(oArmor) && GetBaseItemType(oArmor) == BASE_ITEM_ARMOR)
{
return oArmor;
}
// Check the equipped shield if shields are allowed
if (bAllowShields)
{
oArmor = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget);
if (GetIsObjectValid(oArmor) && (GetBaseItemType(oArmor) == BASE_ITEM_LARGESHIELD ||
GetBaseItemType(oArmor) == BASE_ITEM_SMALLSHIELD ||
GetBaseItemType(oArmor) == BASE_ITEM_TOWERSHIELD))
{
return oArmor;
}
}
}
// Return invalid object if no valid armor or shield is found
return OBJECT_INVALID;
}
/* object IPGetTargetedOrEquippedArmor(int bAllowShields = FALSE)
{
object oTarget = PRCGetSpellTargetObject();
if(GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM)
@@ -1193,7 +1241,7 @@ object IPGetTargetedOrEquippedArmor(int bAllowShields = FALSE)
return OBJECT_INVALID;
}
*/
// ----------------------------------------------------------------------------
// Returns FALSE it the item has no sequencer property
// Returns number of spells that can be stored in any other case
@@ -1578,7 +1626,7 @@ int IPGetWeaponEnhancementBonus(object oWeapon, int nEnhancementBonusType = ITEM
if(GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT || !bIgnoreTemporary)
{
nTemp = GetItemPropertyCostTableValue(ip);
nFound = max(nFound, nTemp);
nFound = PRCMax(nFound, nTemp);
}
}
ip = GetNextItemProperty(oWeapon);

View File

@@ -592,7 +592,7 @@ struct manifestation EvaluateAugmentation(struct manifestation manif, struct pow
// Determine how many times it can be used and how much it costs
nTimesAugd = nTimesCanAug == PRC_UNLIMITED_AUGMENTATION ?
nToAutodistribute / pap.nAugCost_1 :
min(nToAutodistribute / pap.nAugCost_1, nTimesCanAug);
PRCMin(nToAutodistribute / pap.nAugCost_1, nTimesCanAug);
nToAutodistribute -= nTimesAugd * pap.nAugCost_1;
manif.nTimesAugOptUsed_1 += nTimesAugd;
@@ -611,7 +611,7 @@ struct manifestation EvaluateAugmentation(struct manifestation manif, struct pow
// Determine how many times it can be used and how much it costs
nTimesAugd = nTimesCanAug == PRC_UNLIMITED_AUGMENTATION ?
nToAutodistribute / pap.nAugCost_2 :
min(nToAutodistribute / pap.nAugCost_2, nTimesCanAug);
PRCMin(nToAutodistribute / pap.nAugCost_2, nTimesCanAug);
nToAutodistribute -= nTimesAugd * pap.nAugCost_2;
manif.nTimesAugOptUsed_2 += nTimesAugd;
@@ -630,7 +630,7 @@ struct manifestation EvaluateAugmentation(struct manifestation manif, struct pow
// Determine how many times it can be used and how much it costs
nTimesAugd = nTimesCanAug == PRC_UNLIMITED_AUGMENTATION ?
nToAutodistribute / pap.nAugCost_3 :
min(nToAutodistribute / pap.nAugCost_3, nTimesCanAug);
PRCMin(nToAutodistribute / pap.nAugCost_3, nTimesCanAug);
nToAutodistribute -= nTimesAugd * pap.nAugCost_3;
manif.nTimesAugOptUsed_3 += nTimesAugd;
@@ -649,7 +649,7 @@ struct manifestation EvaluateAugmentation(struct manifestation manif, struct pow
// Determine how many times it can be used and how much it costs
nTimesAugd = nTimesCanAug == PRC_UNLIMITED_AUGMENTATION ?
nToAutodistribute / pap.nAugCost_4 :
min(nToAutodistribute / pap.nAugCost_4, nTimesCanAug);
PRCMin(nToAutodistribute / pap.nAugCost_4, nTimesCanAug);
nToAutodistribute -= nTimesAugd * pap.nAugCost_4;
manif.nTimesAugOptUsed_4 += nTimesAugd;
@@ -668,7 +668,7 @@ struct manifestation EvaluateAugmentation(struct manifestation manif, struct pow
// Determine how many times it can be used and how much it costs
nTimesAugd = nTimesCanAug == PRC_UNLIMITED_AUGMENTATION ?
nToAutodistribute / pap.nAugCost_5 :
min(nToAutodistribute / pap.nAugCost_5, nTimesCanAug);
PRCMin(nToAutodistribute / pap.nAugCost_5, nTimesCanAug);
nToAutodistribute -= nTimesAugd * pap.nAugCost_5;
manif.nTimesAugOptUsed_5 += nTimesAugd;
@@ -687,7 +687,7 @@ struct manifestation EvaluateAugmentation(struct manifestation manif, struct pow
}
// Add in cost reduction
nAugPPCost = max(0, nAugPPCost - nAugPPCostReductions);
nAugPPCost = PRCMax(0, nAugPPCost - nAugPPCostReductions);
// Store the PP cost increase
manif.nPPCost += nAugPPCost;

View File

@@ -791,6 +791,64 @@ int GetIsPsionicCharacter(object oCreature)
);
}
int IsHiddenTalent(object oPC = OBJECT_SELF)
{
if (GetHasFeat(FEAT_HIDDEN_TALENT_BIOFEEDBACK, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_BITE_WOLF, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_BOLT, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_BURST, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_CALLTOMIND, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_CALL_WEAPONRY, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_CHAMELEON, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_CLAWS_BEAST, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_COMPRESSION, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_CONCEALTHOUGHT, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_CREATESOUND, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_CRYSTALSHARD, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_DAZE, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_DECELERATION, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_DEFPRECOG, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_DEMORALIZE, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_DISABLE, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_DISTRACT, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_ELFSIGHT, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_EMPATHY, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_EMPTYMIND, oPC) ||
//GetHasFeat(FEAT_HIDDEN_TALENT_ENERGYRAY, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_ENTANGLE, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_EXPANSION, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_FARHAND, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_FORCESCREEN, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_GREASE, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_HAMMER, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_INERTIALARMOUR, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_MATTERAGITATION, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_MINDTHRUST, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_MYLIGHT, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_OFFPRECOG, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_OFFPRESC, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_PREVENOM, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_PREVENOM_WEAPON, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_SKATE, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_STOMP, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_SYNESTHETE, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_TELEMPATHICPRO, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_THICKSKIN, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_VIGOR, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_GRIP_IRON, oPC))
{
return TRUE;
}
else
{
return FALSE;
}
}
void LocalCleanExtraFists(object oCreature)
{
int iIsCWeap, iIsEquip;
@@ -1092,7 +1150,7 @@ int GetHighestManifesterLevel(object oCreature)
/* int GetHighestManifesterLevel(object oCreature)
{
return max(max(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetManifesterLevel(oCreature, GetClassByPosition(1, oCreature)) : 0,
return PRCMax(PRCMax(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

View File

@@ -127,7 +127,7 @@ int _GetMetaPsiPPCost(int nCost, int nIMPsiRed, int bUseSum)
nCost :
bUseSum ? nCost :
// When calculating Improved Metapsionics separately, it cannot make the cost of a single metapsionic use go below 1
max(nCost - nIMPsiRed, 1);
PRCMax(nCost - nIMPsiRed, 1);
}
/** Internal function.
@@ -477,7 +477,7 @@ void EvaluateChainPower(struct manifestation manif, object oPrimaryTarget, int b
if(manif.bChain)
{
// It is, determine amount of secondary targets and range to look for the over
int nMaxTargets = min(manif.nManifesterLevel, 20); // Chain Power maxes out at 20 secondary targets
int nMaxTargets = PRCMin(manif.nManifesterLevel, 20); // Chain Power maxes out at 20 secondary targets
float fRange = FeetToMeters(30.0f);
location lTarget = GetLocation(oPrimaryTarget);
object oSecondaryTarget;

View File

@@ -134,20 +134,23 @@ void LoseAllPowerPoints(object oChar, int bInform = TRUE);
* @param oChar Character whose feats to evaluate
* @return The amount of Power Points gained from Feats
*/
int _GetFeatBonusPP(object oChar){
int _GetFeatBonusPP(object oChar)
{
int nBonusPP = 0;
// Normal feats
if(GetHasFeat(FEAT_WILD_TALENT, oChar))
//:: Wild Talent & Hidden Talents
if(GetHasFeat(FEAT_WILD_TALENT, oChar) || IsHiddenTalent())
nBonusPP += 2;
int i, nPsiTalents;
//:: Psionic Feats
int i;
int nPsiTalents;
for(i = FEAT_PSIONIC_TALENT_1; i <= FEAT_PSIONIC_TALENT_10; i++)
if(GetHasFeat(i, oChar)) nPsiTalents++;
nBonusPP += nPsiTalents * (2 + nPsiTalents + 1) / 2;
// Epic feats
//:: Epic feats
int nImpManifestations;
for(i = FEAT_IMPROVED_MANIFESTATION_1; i <= FEAT_IMPROVED_MANIFESTATION_10; i++)
if(GetHasFeat(i, oChar)) nImpManifestations++;

View File

@@ -254,7 +254,7 @@ int _PsionicHole(object oTarget)
if(GetHasFeat(FEAT_PSIONIC_HOLE, oTarget))
// Psionic Hole will never decrease power cost, even if the target is lacking in wisdom bonus
nCost = max(GetAbilityModifier(ABILITY_WISDOM, oTarget), 0);
nCost = PRCMax(GetAbilityModifier(ABILITY_WISDOM, oTarget), 0);
return nCost;
}

View File

@@ -79,7 +79,7 @@ PRCGetPowerResistance(object oTarget, object oCaster)
)
{
// Only use the PR given by the power if it's higher than the previous
iPowerRes = max(iPowerRes, GetLocalInt(oTarget, "PRC_Power_ThoughtShield_PR"));
iPowerRes = PRCMax(iPowerRes, GetLocalInt(oTarget, "PRC_Power_ThoughtShield_PR"));
}
// Tower of Iron Will, 19 + augment vs Mind-Affecting
if(GetLocalInt(oTarget, "PRC_Power_TowerOfIronWill_PR") &&
@@ -87,7 +87,7 @@ PRCGetPowerResistance(object oTarget, object oCaster)
)
{
// Only use the PR given by the power if it's higher than the previous
iPowerRes = max(iPowerRes, GetLocalInt(oTarget, "PRC_Power_TowerOfIronWill_PR"));
iPowerRes = PRCMax(iPowerRes, GetLocalInt(oTarget, "PRC_Power_TowerOfIronWill_PR"));
}
// Foe Hunter SR stacks with normal SR

View File

@@ -323,7 +323,7 @@ int GetHighestShadowcasterLevel(object oCreature)
/* int GetHighestShadowcasterLevel(object oCreature)
{
return max(max(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetShadowcasterLevel(oCreature, GetClassByPosition(1, oCreature)) : 0,
return PRCMax(PRCMax(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

View File

@@ -140,8 +140,8 @@ void MazeEscapeHB(object oCreature, int nCountLeft)
int bResult = (nD20 + nIntMod) >= MAZE_ESCAPE_DC;
// Inform the creature of the result
SendMessageToPC(oCreature, GetRGB(7,7,15) + GetName(oCreature) + "</c>" + // "Int check" "success" "failure"
GetRGB(1,1,15) + " : " + GetStringByStrRef(16825701) + " : *" + (bResult ? GetStringByStrRef(5352) : GetStringByStrRef(5353)) + "* : (" + IntToString(nD20) + " + " + IntToString(nIntMod) + " = " + IntToString(nD20 + nIntMod) + " vs. DC: " + IntToString(MAZE_ESCAPE_DC) + ")</c>");
SendMessageToPC(oCreature, PRCGetRGB(7,7,15) + GetName(oCreature) + "</c>" + // "Int check" "success" "failure"
PRCGetRGB(1,1,15) + " : " + GetStringByStrRef(16825701) + " : *" + (bResult ? GetStringByStrRef(5352) : GetStringByStrRef(5353)) + "* : (" + IntToString(nD20) + " + " + IntToString(nIntMod) + " = " + IntToString(nD20 + nIntMod) + " vs. DC: " + IntToString(MAZE_ESCAPE_DC) + ")</c>");
// Return from the maze if the check was successfull
if(bResult)

View File

@@ -518,7 +518,7 @@ int GetInitiatorLevel(object oInitiator = OBJECT_SELF, int nSpecificClass = CLAS
// A character with no initiator levels has an init level of 1/2 HD (min 1)
if(!nLevel)
nLevel = max(1, nTotalHD/2);
nLevel = PRCMax(1, nTotalHD/2);
// This spam is technically no longer necessary once the Initiator level getting mechanism has been confirmed to work
// if(DEBUG) FloatingTextStringOnCreature("Initiator Level: " + IntToString(nLevel), oInitiator, FALSE);
@@ -557,7 +557,7 @@ int GetHighestInitiatorLevel(object oCreature)
/* int GetHighestInitiatorLevel(object oCreature)
{
return max(max(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetInitiatorLevel(oCreature, GetClassByPosition(1, oCreature)) : 0,
return PRCMax(PRCMax(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

View File

@@ -368,7 +368,7 @@ int GetHighestTrueSpeakerLevel(object oCreature)
/* int GetHighestTrueSpeakerLevel(object oCreature)
{
return max(max(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetTruespeakerLevel(oCreature, GetClassByPosition(1, oCreature)) : 0,
return PRCMax(PRCMax(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

View File

@@ -2307,7 +2307,7 @@ int InnateCounterspell(object oCaster, int nSpellId, int nSpellLevel)
// Set a marker on the Noctumancer at the right level
if (GetLevelByClass(CLASS_TYPE_NOCTUMANCER) >= 7)
{
int nStore = min(1, nSpellLevel/2);
int nStore = PRCMin(1, nSpellLevel/2);
SetLocalInt(oShadow, "InnateCounterSuccess", nStore);
FloatingTextStringOnCreature("You have one free mystery of "+IntToString(nStore)+" level", oShadow, FALSE);
}