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

@@ -20,15 +20,15 @@ int nTest;
switch(nSpell)
{
case SPELL_LESSER_DISPEL : nTest = d20(1) + min(5, nSCLevel); break;
case SPELL_DISPEL_MAGIC : nTest = d20(1) + min(10, nSCLevel); break;
case SPELL_DISPELLING_TOUCH : nTest = d20(1) + min(10, nSCLevel); break;
case SPELL_SLASHING_DISPEL : nTest = d20(1) + min(10, nSCLevel); break;
case POWER_DISPELPSIONICS : nTest = d20(1) + min(15, GetManifesterLevel(oSCaster)); break;
case SPELL_GREATER_DISPELLING : nTest = d20(1) + min(20, nSCLevel); break;
case SPELL_GREAT_WALL_OF_DISPEL : nTest = d20(1) + min(20, nSCLevel); break;
case SPELL_MORDENKAINENS_DISJUNCTION: nTest = d20(1) + min(40, nSCLevel); break;
case 4061 : nTest = d20(1) + min(40, nSCLevel); break;//Superb Dispelling
case SPELL_LESSER_DISPEL : nTest = d20(1) + PRCMin(5, nSCLevel); break;
case SPELL_DISPEL_MAGIC : nTest = d20(1) + PRCMin(10, nSCLevel); break;
case SPELL_DISPELLING_TOUCH : nTest = d20(1) + PRCMin(10, nSCLevel); break;
case SPELL_SLASHING_DISPEL : nTest = d20(1) + PRCMin(10, nSCLevel); break;
case POWER_DISPELPSIONICS : nTest = d20(1) + PRCMin(15, GetManifesterLevel(oSCaster)); break;
case SPELL_GREATER_DISPELLING : nTest = d20(1) + PRCMin(20, nSCLevel); break;
case SPELL_GREAT_WALL_OF_DISPEL : nTest = d20(1) + PRCMin(20, nSCLevel); break;
case SPELL_MORDENKAINENS_DISJUNCTION: nTest = d20(1) + PRCMin(40, nSCLevel); break;
case 4061 : nTest = d20(1) + PRCMin(40, nSCLevel); break;//Superb Dispelling
default : nTest = 0; break;
}
if (nTest >= 11 + nMasterCLevel)

View File

@@ -1,5 +1,6 @@
#include "prc_inc_clsfunc"
#include "psi_inc_soulkn"
#include "prc_inc_combat"
// Sanctify_Feat(iType);
@@ -467,7 +468,6 @@ void main()
//Vile();
UnholyStrike();
}
}
else if (GetAlignmentGoodEvil(oPC)!= ALIGNMENT_EVIL)
{
@@ -532,7 +532,63 @@ void main()
Sanctify();
MartialStrike();
}
if(GetIsUnarmed(oPC))
{
effect eCheckEffect = GetFirstEffect(oPC);
while (GetIsEffectValid(eCheckEffect))
{
if(GetEffectTag(eCheckEffect) == "VoPFeat"+IntToString(FEAT_SANCTIFYKISTRIKE)) SetLocalInt(oPC,"VoPFeat"+IntToString(FEAT_SANCTIFYKISTRIKE),1);
if(GetEffectTag(eCheckEffect) == "VoPFeat"+IntToString(FEAT_HOLYKISTRIKE)) SetLocalInt(oPC,"VoPFeat"+IntToString(FEAT_HOLYKISTRIKE),1);
eCheckEffect = GetNextEffect(oPC);
}
// Sanctify Strike
if (GetHasFeat(FEAT_SANCTIFYKISTRIKE, oPC) || GetLocalInt(oPC, "VoPFeat"+IntToString(FEAT_SANCTIFYKISTRIKE)))
{
effect eEffect1 = VersusAlignmentEffect(EffectDamageIncrease(DAMAGE_BONUS_1,DAMAGE_TYPE_POSITIVE),ALIGNMENT_ALL,ALIGNMENT_EVIL);
effect eEffect2 = VersusRacialTypeEffect(EffectDamageIncrease(DAMAGE_BONUS_1d4,DAMAGE_TYPE_POSITIVE),RACIAL_TYPE_OUTSIDER);
effect eLink = EffectLinkEffects(eEffect1,eEffect2);
eLink = TagEffect(eLink,"SanctifyKiStrike");
//Remove any prior bonus to avoid duplication
effect eCheckEffect = GetFirstEffect(oPC);
while (GetIsEffectValid(eCheckEffect))
{
if(GetEffectTag(eCheckEffect) == "SanctifyKiStrike") RemoveEffect(oPC, eCheckEffect);
eCheckEffect = GetNextEffect(oPC);
}
//Give player the bonus
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oPC);
}
// Holy Ki Strike
if (GetHasFeat(FEAT_HOLYKISTRIKE, oPC) || GetLocalInt(oPC, "VoPFeat"+IntToString(FEAT_HOLYKISTRIKE)))
{
effect eEffect1 = VersusAlignmentEffect(EffectDamageIncrease(DAMAGE_BONUS_2d6,DAMAGE_TYPE_POSITIVE),ALIGNMENT_ALL,ALIGNMENT_EVIL);
eEffect1 = TagEffect(eEffect1,"HolyKiStrike");
//Remove any prior bonus to avoid duplication and remove Sanctify Ki Strike
effect eCheckEffect = GetFirstEffect(oPC);
while (GetIsEffectValid(eCheckEffect))
{
if(GetEffectTag(eCheckEffect) == "SanctifyKiStrike" || GetEffectTag(eCheckEffect) == "HolyKiStrike") RemoveEffect(oPC, eCheckEffect);
eCheckEffect = GetNextEffect(oPC);
}
//Give player the bonus
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect1, oPC);
}
}
else
{
effect eCheckEffect = GetFirstEffect(oPC);
while (GetIsEffectValid(eCheckEffect))
{
if(GetEffectTag(eCheckEffect) == "SanctifyKiStrike" || GetEffectTag(eCheckEffect) == "HolyKiStrike") RemoveEffect(oPC, eCheckEffect);
eCheckEffect = GetNextEffect(oPC);
}
}
}
Vile();

View File

@@ -145,23 +145,6 @@ void main()
//Give player the bonus, regardless of the weapon
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oPC);
//Apply Golden Ice effect if unarmed and has feat
if(GetIsUnarmed(oPC) && (GetHasFeat(FEAT_RAVAGEGOLDENICE, oPC) || GetPersistantLocalInt(oPC, "VoPFeat"+IntToString(FEAT_RAVAGEGOLDENICE))))
{
itemproperty ip1 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2);
ip1 = TagItemProperty(ip1,"GoldenIce");
IPSafeAddItemProperty(oPC,ip1,0.0,X2_IP_ADDPROP_POLICY_REPLACE_EXISTING,FALSE,FALSE);
}
else
{
itemproperty eCheckIPL = GetFirstItemProperty(oPC);
while (GetIsItemPropertyValid(eCheckIPL))
{
if(GetItemPropertyTag(eCheckIPL) == "GoldenIce") RemoveItemProperty(oPC,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2));
eCheckIPL = GetNextItemProperty(oPC);
}
}
// For some reason, EVENT_ONPLAYEREQUIPITEM just works with weapons, so it is better to check all other items for magic elsewhere
for (nSlot=0; nSlot < 13; nSlot++) //All but creatures slots
{

View File

@@ -0,0 +1,145 @@
//:://////////////////////////////////////////////
//:: Vow of Poverty Extra Feat
//:: ft_vowpoverty_ft
//:://////////////////////////////////////////////
/** @file
This allows you to choose the extra feat each even level.
@original author Fencas
@date Created - 2025-01-12
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
#include "inc_dynconv"
#include "prc_inc_function"
#include "NW_I0_GENERIC"
#include "inc_persist_loca"
//////////////////////////////////////////////////
/* Constant defintions */
//////////////////////////////////////////////////
const int STAGE_SELECT_ABIL = 0;
//////////////////////////////////////////////////
/* Function defintions */
//////////////////////////////////////////////////
void main()
{
object oPC = GetPCSpeaker();
object oSkin = GetPCSkin(oPC);
int i, j, nTest, nRow;
int nValue = GetLocalInt(oPC, DYNCONV_VARIABLE);
int nStage = GetStage(oPC);
int nLevel = GetPersistantLocalInt(oPC, "VoPFeatCheck");
// Check which of the conversation scripts called the scripts
if(nValue == 0) // All of them set the DynConv_Var to non-zero value, so something is wrong -> abort
{
if(DEBUG) DoDebug("ft_vowpoverty_ft: Aborting due to error.");
return;
}
if(nValue == DYNCONV_SETUP_STAGE)
{
// Check if this stage is marked as already set up
// This stops list duplication when scrolling
if(!GetIsStageSetUp(nStage, oPC))
{
// Maneuver selection stage
if(nStage == STAGE_SELECT_ABIL)
{
//Check which Feats have been added by this ability
int nTotalRows = Get2DARowCount("prc_vop_feats");
effect eCheckEffect = GetFirstEffect(oPC);
while (GetIsEffectValid(eCheckEffect))
{
for(nRow=0; nRow <= nTotalRows; nRow++)
{
string nFeat = Get2DAString("prc_vop_feats","FeatIndex",nRow);
if(GetEffectTag(eCheckEffect) == "VoPFeat"+nFeat) SetLocalInt(oPC,"VoPFeat"+nFeat,1);
}
eCheckEffect = GetNextEffect(oPC);
}
SetHeader("Choose an Exalted Feat for this new level under a Vow of Poverty:");
//Add new option depending if it was not selected and char has all prereqs
for(nRow=0; nRow <= nTotalRows; nRow++)
{
//Get prereqs from 2DA
string sName = Get2DAString("prc_vop_feats","Name",nRow);
int nFeat = StringToInt(Get2DAString("prc_vop_feats","FeatIndex",nRow));
int nPreReq1 = StringToInt(Get2DAString("prc_vop_feats","PreReq1",nRow));
int nPreReq2 = StringToInt(Get2DAString("prc_vop_feats","PreReq2",nRow));
int nCon = StringToInt(Get2DAString("prc_vop_feats","Con",nRow));
int nWis = StringToInt(Get2DAString("prc_vop_feats","Wis",nRow));
int nCha = StringToInt(Get2DAString("prc_vop_feats","Cha",nRow));
int nBAB = StringToInt(Get2DAString("prc_vop_feats","BAB",nRow));
int nLaw = StringToInt(Get2DAString("prc_vop_feats","Law",nRow));
int nAllPreReq = 1;
//Check if prereqs exist and, if so, if they are met - if not, set bol to 0
if(nPreReq1>0 && !GetHasFeat(nPreReq1, oPC)) nAllPreReq = 0;
if(nPreReq1==213 && GetLevelByClass(CLASS_TYPE_MONK, oPC) >= 1) nAllPreReq = 1; //for Ki Strike and monks
if(nPreReq2>0 && !GetHasFeat(nPreReq2, oPC)) nAllPreReq = 0;
if(nCon>0 && !GetAbilityScore(oPC,ABILITY_CONSTITUTION) >= nCon) nAllPreReq = 0;
if(nWis>0 && !GetAbilityScore(oPC,ABILITY_CONSTITUTION) >= nWis) nAllPreReq = 0;
if(nCha>0 && !GetAbilityScore(oPC,ABILITY_CONSTITUTION) >= nCha) nAllPreReq = 0;
if(nBAB>0 && !GetBaseAttackBonus(oPC) >= nBAB) nAllPreReq = 0;
if(nLaw>0 && !GetAlignmentLawChaos(oPC) == ALIGNMENT_LAWFUL) nAllPreReq = 0;
if (!GetHasFeat(nFeat, oPC) && !GetLocalInt(oPC, "VoPFeat"+IntToString(nFeat)) && nAllPreReq == 1) AddChoice(sName, nFeat, oPC);
}
AddChoice("Cancel (you will get no Exalted Feats this level)", 0, oPC);
SetDefaultTokens(); //If there are more than 10 options, add Next
MarkStageSetUp(STAGE_SELECT_ABIL, oPC);
}
}
// Do token setup
SetupTokens();
}
else if(nValue == DYNCONV_EXITED)
{
if(DEBUG) DoDebug("ft_vowpoverty_ft: Running exit handler");
}
else if(nValue == DYNCONV_ABORTED)
{
// This section should never be run, since aborting this conversation should
// always be forbidden and as such, any attempts to abort the conversation
// should be handled transparently by the system
if(DEBUG) DoDebug("ft_vowpoverty_ft: ERROR: Conversation abort section run");
}
// Handle PC response
else
{
int nChoice = GetChoice(oPC);
if(nStage == STAGE_SELECT_ABIL)
{
SetPersistantLocalInt(oPC, "VoPFeat"+IntToString(nLevel),1); //Register the choice was made
//If it was not cancelled, give chosen feat to PC (as EffectBonusFeat)
if(nChoice > 0)
{
effect eBonusFeat = EffectBonusFeat(nChoice);
eBonusFeat = UnyieldingEffect(eBonusFeat);
eBonusFeat = TagEffect(eBonusFeat, "VoPFeat"+IntToString(nChoice));
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonusFeat, oPC);
}
// And we're all done
DeletePersistantLocalInt(oPC,"VoPFeatCheck");
AllowExit(DYNCONV_EXIT_FORCE_EXIT);
}
if(DEBUG) DoDebug("ft_vowpoverty_ft: New stage: " + IntToString(nStage));
// Store the stage value. If it has been changed, this clears out the choices
SetStage(nStage, oPC);
}
}

View File

@@ -41,7 +41,7 @@ void main()
}
else if(GetLocalInt(oPC, "HadrimoiPerfectSymmetry"))
{
nAttackCount = max(nBAB, 3);
nAttackCount = PRCMax(nBAB, 3);
if (DEBUG) DoDebug("prc_bab_caller: Using hadrimoi perfect symmetry, # attacks = " + IntToString(nAttackCount));
}
else
@@ -77,7 +77,7 @@ void main()
if (DEBUG) DoDebug("prc_bab_caller: detected Spell Tensers Transformation, # attacks = " + IntToString(nTTAttackCount));
}
int nMax = max(nDPAttackCount, nTTAttackCount);
int nMax = PRCMax(nDPAttackCount, nTTAttackCount);
// we only consider any changes in # attacks, if Tenser's or DP *increases* our "normal" attack count!
// this makes sure, that we won't call SetBaseAttackBonus needlessly
@@ -142,7 +142,7 @@ void main()
// the aurora engine can also handle up to two offhand attacks
//calculate the number of main hand attacks the aurora engine can at most handle, including the up to 2 offhand attacks
int nCap = 12 - min(nOffhand,2);
int nCap = 12 - PRCMin(nOffhand,2);
// apply the cap and calculate the number of overflow (main hand) attacks, that aurora engine can't handle (usually this will never happen)
if(nAttackCount > nCap)
{

View File

@@ -48,7 +48,7 @@ void OnEquip(object oPC,object oSkin)
// Bonus Lvl BladeSinger Max Bonus Int
int BladeLv = min(GetLevelByClass(CLASS_TYPE_BLADESINGER, oPC), GetAbilityModifier(ABILITY_INTELLIGENCE,oPC));
int BladeLv = PRCMin(GetLevelByClass(CLASS_TYPE_BLADESINGER, oPC), GetAbilityModifier(ABILITY_INTELLIGENCE,oPC));
SetCompositeBonus(oSkin, "BladesAC", BladeLv, ITEM_PROPERTY_AC_BONUS);

View File

@@ -799,7 +799,7 @@ void CraftingHB(object oPC, object oItem, itemproperty ip, int nCost, int nXP, s
FloatingTextStringOnCreature("Crafting Failed!", oPC);
DeleteLocalInt(oPC, PRC_CRAFT_HB);
TakeGoldFromCreature(nCost, oPC, TRUE);
SetXP(oPC, max(GetXP(oPC) - nXP, GetHitDice(oPC) * (GetHitDice(oPC) - 1) * 500)); //can't delevel
SetXP(oPC, PRCMax(GetXP(oPC) - nXP, GetHitDice(oPC) * (GetHitDice(oPC) - 1) * 500)); //can't delevel
return;
}
}

View File

@@ -62,7 +62,7 @@ void main()
// Determine DC for this target
nDC = d20() // Die roll
+ GetHitDice(oTarget) // Hit dice
+ max(0, GetAbilityModifier(ABILITY_WISDOM, oTarget)) // Wisdom bonus, no wisdom penalty
+ PRCMax(0, GetAbilityModifier(ABILITY_WISDOM, oTarget)) // Wisdom bonus, no wisdom penalty
+ (4 * (PRCGetCreatureSize(oTarget) - nPCSize)) // Adjust by 4 in favor of the bigger creature for each size category it is bigger than the smaller one
;

View File

@@ -42,7 +42,7 @@ void main()
// Intimidate DC calculation
int nDC = d20() // Die roll
+ GetHitDice(oTarget) // Hit dice
+ max(0, GetAbilityModifier(ABILITY_WISDOM, oTarget)) // Wisdom bonus, no wisdom penalty
+ PRCMax(0, GetAbilityModifier(ABILITY_WISDOM, oTarget)) // Wisdom bonus, no wisdom penalty
+ (4 * (PRCGetCreatureSize(oTarget) - PRCGetCreatureSize(oPC))) // Adjust by 4 in favor of the bigger creature for each size category it is bigger than the smaller one
;
// Construct Intimidate effect

View File

@@ -20,6 +20,6 @@ void main()
int nStk = GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER);
int nPal = GetLevelByClass(CLASS_TYPE_PALADIN);
int nLevel = max(nPal, max(nStk, nSlayer));
int nLevel = PRCMax(nPal, PRCMax(nStk, nSlayer));
DoRacialSLA(SPELL_DETECT_EVIL, nLevel);
}

View File

@@ -212,7 +212,7 @@ void handleCraftProperties2da(string s2da, int row = 0)
void handleCraftItems2da(int row = 0)
{
int max;
for(max = min(row + 25, PRCGetFileEnd("prc_craft_gen_it")); row < max; row++)
for(max = PRCMin(row + 25, PRCGetFileEnd("prc_craft_gen_it")); row < max; row++)
{
DoDebug("Handling prc_craft_gen_it row " + IntToString(row));

View File

@@ -329,7 +329,7 @@ int FavouredSoul()
+ GetHasFeat(FEAT_FAVOURED_SOUL_FIRE)
+ GetHasFeat(FEAT_FAVOURED_SOUL_SONIC);
if(nEnergy != min(3, nFS / 5))
if(nEnergy != PRCMin(3, nFS / 5))
{
FloatingTextStringOnCreature("You must select an Energy Resistance Feat. Please reselect your feats.", OBJECT_SELF, FALSE);
return TRUE;
@@ -769,11 +769,11 @@ int SkillRequirements()
int CraftingFeats()
{
int nCasterLvl = max(GetCasterLvl(TYPE_ARCANE), GetCasterLvl(TYPE_DIVINE)),
int nCasterLvl = PRCMax(GetCasterLvl(TYPE_ARCANE), GetCasterLvl(TYPE_DIVINE)),
nManifesterLvl = GetManifesterLevel(OBJECT_SELF, GetPrimaryPsionicClass()),
nInvokerLvl = GetInvokerLevel(OBJECT_SELF, GetPrimaryInvocationClass()),
nCasterMax = max(nCasterLvl, nInvokerLvl),
nMax = max(nCasterMax, nManifesterLvl),
nCasterMax = PRCMax(nCasterLvl, nInvokerLvl),
nMax = PRCMax(nCasterMax, nManifesterLvl),
nArti = GetLevelByClass(CLASS_TYPE_ARTIFICER),
nBattle = GetLevelByClass(CLASS_TYPE_BATTLESMITH),
nIron = GetLevelByClass(CLASS_TYPE_IRONSOUL_FORGEMASTER);
@@ -1546,7 +1546,7 @@ int Shaman()
+ GetHasFeat(FEAT_BLIND_FIGHT)
+ GetHasFeat(FEAT_DEFLECT_ARROWS);
if(nIS < min(5, (nClass/4)))
if(nIS < PRCMin(5, (nClass/4)))
{
FloatingTextStringOnCreature("You do not have the correct amount of bonus feats. Please reselect your feats.", OBJECT_SELF, FALSE);
return TRUE;

View File

@@ -58,7 +58,7 @@ void main()
//Save
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nSaveDC, SAVING_THROW_TYPE_DEATH))
{
int nDam = d6(3) + min(20, nCasterLvl);
int nDam = d6(3) + PRCMin(20, nCasterLvl);
}
else

View File

@@ -223,7 +223,7 @@ void main()
if(DEBUG) DoDebug("prc_evnt_spirwep: SR check already performed for this target. Skipping SR check.");
}
int nDamBonus = min(5, nCasterLevel / 3);
int nDamBonus = PRCMin(5, nCasterLevel / 3);
effect eDamage = EffectDamage(nDamBonus, DAMAGE_TYPE_DIVINE);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget);
if(DEBUG) DoDebug("prc_evnt_spirwep: "+IntToString(nDamBonus)+" magical damage applied to the target.");

View File

@@ -13,6 +13,7 @@
#include "moi_inc_moifunc"
#include "prc_inc_clsfunc"
#include "psi_inc_core"
void DisablePowerAttack(object oPC);
void PRCFeat_AddMagicalBonuses(object oPC, object oSkin);
@@ -253,7 +254,22 @@ void main()
if(iEquip)
PRCFeat_Equip(oPC, oSkin, iEquip);
//Checking VoP feats
int nTotalRows = Get2DARowCount("prc_vop_feats");
int nRow;
effect eCheckEffect = GetFirstEffect(oPC);
while (GetIsEffectValid(eCheckEffect))
{
for(nRow=0; nRow <= nTotalRows; nRow++)
{
string nFeat = Get2DAString("prc_vop_feats","FeatIndex",nRow);
if(GetEffectTag(eCheckEffect) == "VoPFeat"+nFeat) SetLocalInt(oPC,"VoPFeat"+nFeat,1);
}
eCheckEffect = GetNextEffect(oPC);
}
// Feats are checked here
//if(GetHasFeat(FEAT_SAC_VOW, oPC)) ExecuteScript("prc_vows", oPC);
//if(GetHasFeat(FEAT_LICHLOVED, oPC)) ExecuteScript("prc_lichloved", oPC);
if(GetHasFeat(FEAT_EB_HAND, oPC) ||
@@ -296,10 +312,8 @@ void main()
//if(GetHasFeat(FEAT_LINGERING_DAMAGE, oPC)) ExecuteScript("ft_lingdmg", oPC);
//if(GetHasFeat(FEAT_MAGICAL_APTITUDE, oPC)) ExecuteScript("prc_magaptitude", oPC);
if(GetHasFeat(FEAT_ETERNAL_FREEDOM, oPC)) ExecuteScript("etern_free", oPC);
if(GetHasFeat(FEAT_INTUITIVE_ATTACK, oPC) || GetPersistantLocalInt(oPC, "VoPFeat"+IntToString(FEAT_INTUITIVE_ATTACK)))
{
ExecuteScript("prc_intuiatk", oPC);
}
if(GetHasFeat(FEAT_INTUITIVE_ATTACK, oPC) || GetLocalInt(oPC, "VoPFeat"+IntToString(FEAT_INTUITIVE_ATTACK))) ExecuteScript("prc_intuiatk", oPC);
//if(GetPersistantLocalInt(oPC, "EpicSpell_TransVital")) ExecuteScript("trans_vital", oPC);
//if(GetHasFeat(FEAT_COMBAT_MANIFESTATION, oPC)) ExecuteScript("psi_combat_manif", oPC);
//if(GetHasFeat(FEAT_WILD_TALENT, oPC)) ExecuteScript("psi_wild_talent", oPC);
@@ -599,6 +613,16 @@ void PRCFeat_AddBonusFeats(object oPC, object oSkin)
if(GetHasFeat(FEAT_WILD_TALENT, oPC))
AddSkinFeat(FEAT_PSIONIC_FOCUS, IP_CONST_FEAT_PSIONIC_FOCUS, oSkin, oPC);
if(IsHiddenTalent())
{
AddSkinFeat(FEAT_PSIONIC_FOCUS, IP_CONST_FEAT_PSIONIC_FOCUS, oSkin, oPC);
AddSkinFeat(FEAT_AUGMENT_PSIONICS_QUICKSELECTS, IP_CONST_FEAT_AUGMENT_PSIONICS_QUICKSELECTS, oSkin, oPC);
AddSkinFeat(FEAT_AUGMENT_PSIONICS_DIGITS_0_4, IP_CONST_FEAT_AUGMENT_PSIONICS_DIGITS_0_4, oSkin, oPC);
AddSkinFeat(FEAT_AUGMENT_PSIONICS_DIGITS_5_9, IP_CONST_FEAT_AUGMENT_PSIONICS_DIGITS_5_9, oSkin, oPC);
AddSkinFeat(FEAT_AUGMENT_PSIONICS_TENS, IP_CONST_FEAT_AUGMENT_PSIONICS_TENS, oSkin, oPC);
AddSkinFeat(FEAT_AUGMENT_QUICKSELECTS_2, IP_CONST_FEAT_AUGMENT_QUICKSELECTS_2, oSkin, oPC);
}
if (GetTotalEssentia(oPC))
AddSkinFeat(FEAT_INVEST_ESSENTIA_CONV, IP_CONST_FEAT_INVEST_ESSENTIA_CONV, oSkin, oPC);
@@ -727,7 +751,12 @@ void PRCFeat_AddCompositeBonuses(object oPC, object oSkin)
if(GetSkillRank(SKILL_JUMP, oPC) > 4)
SetCompositeBonus(oSkin, "SkillJTum", 2, ITEM_PROPERTY_SKILL_BONUS, SKILL_TUMBLE);
if(GetHasFeat(FEAT_GIFTOFFAITH, oPC) || GetLocalInt(oPC, "VoPFeat"+IntToString(FEAT_GIFTOFFAITH)))
{
SetCompositeBonus(oSkin, "GiftOfFaith", 2, ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC, IP_CONST_SAVEVS_FEAR);
}
if(nAlignmentGoodEvil == ALIGNMENT_GOOD)
{
if(GetHasFeat(FEAT_SAC_VOW, oPC))
@@ -741,14 +770,22 @@ void PRCFeat_AddCompositeBonuses(object oPC, object oSkin)
if(nAlignmentLawChaos == ALIGNMENT_LAWFUL)
{
if(GetHasFeat(FEAT_VOW_OBED, oPC))
if(GetHasFeat(FEAT_VOW_OBED, oPC) || GetLocalInt(oPC, "VoPFeat"+IntToString(FEAT_VOW_OBED)))
SetCompositeBonus(oSkin, "VowObed", 4, ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC, IP_CONST_SAVEBASETYPE_WILL);
}
if(GetHasFeat(FEAT_VOW_PURITY, oPC))
if(GetHasFeat(FEAT_VOW_PURITY, oPC) || GetLocalInt(oPC, "VoPFeat"+IntToString(FEAT_VOW_PURITY)))
{
SetCompositeBonus(oSkin, "VowPurity_De", 1, ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC, IP_CONST_SAVEVS_DEATH);
SetCompositeBonus(oSkin, "VowPurity_Di", 1, ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC, IP_CONST_SAVEVS_DISEASE);
}
}
if(GetHasFeat(FEAT_VOWABSTINENCE, oPC) || GetLocalInt(oPC, "VoPFeat"+IntToString(FEAT_VOWABSTINENCE)))
{
SetCompositeBonus(oSkin, "VowAbstinence", 4, ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC, IP_CONST_SAVEVS_POISON);
}
if(GetHasFeat(FEAT_VOWCHASTITY, oPC) || GetLocalInt(oPC, "VoPFeat"+IntToString(FEAT_VOWCHASTITY)))
{
SetCompositeBonus(oSkin, "VowChastity", 4, ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC, IP_CONST_SAVEVS_MINDAFFECTING);
}
}
else if(nAlignmentGoodEvil == ALIGNMENT_EVIL)
{

View File

@@ -1,4 +1,5 @@
#include "prc_alterations"
#include "prc_inc_unarmed"
int isSimple(object oItem)
{
@@ -54,55 +55,39 @@ int isLight(object oItem)
void main()
{
if(DEBUG) DoDebug("prc_intuiatk: Running main()");
//object oPC = PRCGetSpellTargetObject();
object oPC = OBJECT_SELF; // This should only be called via ExecuteScript on the target, so...
object oSkin = GetPCSkin(oPC);
if(DEBUG) DoDebug("prc_intuiatk: Running main()");
//object oPC = PRCGetSpellTargetObject();
object oPC = OBJECT_SELF; // This should only be called via ExecuteScript on the target, so...
object oSkin = GetPCSkin(oPC);
//Check VoP feats
effect eCheckEffect = GetFirstEffect(oPC);
while (GetIsEffectValid(eCheckEffect))
{
if(GetEffectTag(eCheckEffect) == "VoPFeat"+IntToString(FEAT_RAVAGEGOLDENICE)) SetLocalInt(oPC,"VoPFeat"+IntToString(FEAT_RAVAGEGOLDENICE),1);
if(GetEffectTag(eCheckEffect) == "VoPFeat"+IntToString(FEAT_INTUITIVE_ATTACK)) SetLocalInt(oPC,"VoPFeat"+IntToString(FEAT_INTUITIVE_ATTACK),1);
eCheckEffect = GetNextEffect(oPC);
}
// Check for Golden Ice
if (GetHasFeat(FEAT_RAVAGEGOLDENICE, oPC) || GetLocalInt(oPC, "VoPFeat"+IntToString(FEAT_RAVAGEGOLDENICE)))
{
if(DEBUG) DoDebug("prc_intuiatk: PC has Ravage: Golden Ice");
if (GetLocalInt(oSkin,"IniGoldenIce")) return;
object oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L,oPC);
if (GetHasFeat(FEAT_RAVAGEGOLDENICE, oPC) || GetPersistantLocalInt(oPC, "VoPFeat"+IntToString(FEAT_RAVAGEGOLDENICE)))
{
if(DEBUG) DoDebug("prc_intuiatk: PC has Ravage: Golden Ice");
int iEquip = GetLocalInt(oPC,"ONEQUIP") ;
object oItem;
// fixed to work with new unarmed inc
if(GetIsPRCCreatureWeapon(oItem) && GetAlignmentGoodEvil(oPC) == ALIGNMENT_GOOD)
{
RemoveSpecificProperty(oItem,ITEM_PROPERTY_ONHITCASTSPELL,IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE);
AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2),oItem);
SetLocalInt(oSkin,"IniGoldenIce",1);
}
else RemoveSpecificProperty(oItem,ITEM_PROPERTY_ONHITCASTSPELL,IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE);
}
if (iEquip == 1)
oItem = GetItemLastUnequipped();
else
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
if (iEquip == 1||GetAlignmentGoodEvil(oPC)!= ALIGNMENT_GOOD)
{
if (GetBaseItemType(oItem)==BASE_ITEM_GLOVES)
RemoveSpecificProperty(oItem,ITEM_PROPERTY_ONHITCASTSPELL,IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE);
}
else
{
oItem = GetItemInSlot(INVENTORY_SLOT_ARMS,oPC);
RemoveSpecificProperty(oItem,ITEM_PROPERTY_ONHITCASTSPELL,IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE);
AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2),oItem);
}
object oCweapB = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B,oPC);
object oCweapL = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L,oPC);
object oCweapR = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R,oPC);
RemoveSpecificProperty(oCweapB,ITEM_PROPERTY_ONHITCASTSPELL,IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE);
RemoveSpecificProperty(oCweapL,ITEM_PROPERTY_ONHITCASTSPELL,IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE);
RemoveSpecificProperty(oCweapR,ITEM_PROPERTY_ONHITCASTSPELL,IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE);
if (GetAlignmentGoodEvil(oPC)== ALIGNMENT_GOOD)
{
itemproperty ip1 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2);
ip1 = TagItemProperty(ip1,"GoldenIce");
AddItemProperty(DURATION_TYPE_PERMANENT,ip1,oCweapB);
AddItemProperty(DURATION_TYPE_TEMPORARY,ip1,oCweapL);
AddItemProperty(DURATION_TYPE_TEMPORARY,ip1,oCweapR);
}
}
if(GetHasFeat(FEAT_INTUITIVE_ATTACK, oPC) || GetHasFeat(FEAT_WEAPON_FINESSE, oPC) || GetPersistantLocalInt(oPC, "VoPFeat"+IntToString(FEAT_INTUITIVE_ATTACK)))
if(GetHasFeat(FEAT_INTUITIVE_ATTACK, oPC) || GetHasFeat(FEAT_WEAPON_FINESSE, oPC) || GetLocalInt(oPC, "VoPFeat"+IntToString(FEAT_INTUITIVE_ATTACK)))
{
if(DEBUG) DoDebug("prc_intuiatk: PC has Intuitive Attack or WepFinesse");
@@ -114,7 +99,7 @@ void main()
int iWis = GetAbilityModifier(ABILITY_WISDOM,oPC);
int iIABonus = 0;
int iWFBonus = 0;
int bHasIA = GetHasFeat(FEAT_INTUITIVE_ATTACK, oPC) || GetPersistantLocalInt(oPC, "VoPFeat"+IntToString(FEAT_INTUITIVE_ATTACK));
int bHasIA = GetHasFeat(FEAT_INTUITIVE_ATTACK, oPC) || GetLocalInt(oPC, "VoPFeat"+IntToString(FEAT_INTUITIVE_ATTACK));
int bHasWF = GetHasFeat(FEAT_WEAPON_FINESSE, oPC);
int bUseIA = FALSE;
int bUseWF = FALSE;

View File

@@ -22,7 +22,7 @@ void main()
object oAmmo;
int nClass = GetLevelByClass(CLASS_TYPE_KNIGHT, oPC);
int nCha = GetAbilityModifier(ABILITY_CHARISMA, oPC);
int nBonus = max(1, (nClass/2) + nCha);
int nBonus = PRCMax(1, (nClass/2) + nCha);
// We aren't being called from any event, instead from EvalPRCFeats

View File

@@ -83,7 +83,7 @@ void main()
if(nDexBonus > nMaxDexBonus)
{
nBonus = min(nDexBonus - nMaxDexBonus, nCapIncrease);
nBonus = PRCMin(nDexBonus - nMaxDexBonus, nCapIncrease);
}
//SendMessageToPC(GetFirstPC(), "DEBUG: prc_mithral -> nBonus is "+ IntToString(nBonus)+".");

View File

@@ -80,7 +80,7 @@ void main()
if(DEBUG) DoDebug("Destruction Retribution firing. Dead creature = " + DebugObject2Str(oDead));
int nDamage;
int nDice = max(1, GetHitDice(oDead) / 2); // (hd / 2)d6, min 1d6
int nDice = PRCMax(1, GetHitDice(oDead) / 2); // (hd / 2)d6, min 1d6
float fDelay;
effect eExplode = EffectVisualEffect(VFX_FNF_LOS_EVIL_10); //Replace with Negative Pulse
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);

View File

@@ -234,7 +234,7 @@ void main()
if(!GetIdentified(oItem))
{
// No negative numbers, please
int nLore = max(0, GetSkillRank(SKILL_LORE, oCreature));
int nLore = PRCMax(0, GetSkillRank(SKILL_LORE, oCreature));
int nMax = StringToInt(Get2DACache("SkillVsItemCost", "DeviceCostMax", nLore));
if(nMax == 0)
nMax = 120000000;

View File

@@ -299,7 +299,7 @@ void main()
nDice = 2;
nDam = (iElement == DAMAGE_TYPE_SONIC) ? d4(nDice) : d6(nDice); //reduced damage dice
if((iElement == DAMAGE_TYPE_COLD) || (iElement == DAMAGE_TYPE_ELECTRICAL) || (iElement == DAMAGE_TYPE_ACID))
nDam = max(nDice, nDam - nDice); //minimum of 1 per die
nDam = PRCMax(nDice, nDam - nDice); //minimum of 1 per die
}
}
else
@@ -309,13 +309,13 @@ void main()
nDice = (GetLevelByClass(CLASS_TYPE_PYROKINETICIST, oSpellOrigin) >= 8) ? 4 : 2;
nDam1 = (iElement == DAMAGE_TYPE_SONIC) ? d4(nDice) : d6(nDice); //reduced damage dice
if((iElement == DAMAGE_TYPE_COLD) || (iElement == DAMAGE_TYPE_ELECTRICAL) || (iElement == DAMAGE_TYPE_ACID))
nDam1 = max(nDice, nDam1 - nDice); //minimum of 1 per die
nDam1 = PRCMax(nDice, nDam1 - nDice); //minimum of 1 per die
}
if(GetTag(oItem) == "PRC_PYRO_LASH_WHIP")
{ //Extra damage from whip
nDam2 += (iElement == DAMAGE_TYPE_SONIC) ? d6(1) : d8(1); //reduced damage dice
if((iElement == DAMAGE_TYPE_COLD) || (iElement == DAMAGE_TYPE_ELECTRICAL) || (iElement == DAMAGE_TYPE_ACID))
nDam2 = max(1, nDam2 - 1); //minimum of 1
nDam2 = PRCMax(1, nDam2 - 1); //minimum of 1
}
nDam = nDam1 + nDam2;
}

View File

@@ -1680,7 +1680,7 @@ void main()
string sPsiFile = GetAMSKnownFileName(nClass);
int nMaxLevel = StringToInt(Get2DACache(sPsiFile, "MaxPowerLevel", nLevel));
int nPsiHighest = min(nMaxLevel, nAbility - 10);
int nPsiHighest = PRCMin(nMaxLevel, nAbility - 10);
for(nSpellLevel = 1; nSpellLevel <= nPsiHighest; nSpellLevel++)
{
@@ -1700,8 +1700,8 @@ void main()
int nAbility = GetAbilityScoreForClass(nClass, oPC);
string sShdFile = GetAMSKnownFileName(nClass);
int nShdHighest = max(GetMaxMysteryLevelLearnable(oPC, nClass, 1), GetMaxMysteryLevelLearnable(oPC, nClass, 2));
nShdHighest = max(nShdHighest, GetMaxMysteryLevelLearnable(oPC, nClass, 3));
int nShdHighest = PRCMax(GetMaxMysteryLevelLearnable(oPC, nClass, 1), GetMaxMysteryLevelLearnable(oPC, nClass, 2));
nShdHighest = PRCMax(nShdHighest, GetMaxMysteryLevelLearnable(oPC, nClass, 3));
for(nSpellLevel = 1; nSpellLevel <= nShdHighest; nSpellLevel++)
{

View File

@@ -24,9 +24,15 @@ void main()
SetNaturalWeaponDamage(oComp);
object oCompSkin = GetPCSkin(oComp);
effect eCheckEffect = GetFirstEffect(oPC);
while (GetIsEffectValid(eCheckEffect))
{
if(GetEffectTag(eCheckEffect) == "VoPFeat"+IntToString(FEAT_EXALTED_COMPANION)) SetLocalInt(oPC,"VoPFeat"+IntToString(FEAT_EXALTED_COMPANION),1);
eCheckEffect = GetNextEffect(oPC);
}
//Exalted Companion
if((GetHasFeat(FEAT_EXALTED_COMPANION, oPC) || GetPersistantLocalInt(oPC, "VoPFeat"+IntToString(FEAT_EXALTED_COMPANION)))
if((GetHasFeat(FEAT_EXALTED_COMPANION, oPC) || GetLocalInt(oPC, "VoPFeat"+IntToString(FEAT_EXALTED_COMPANION)))
&& GetAlignmentGoodEvil(oPC) == ALIGNMENT_GOOD)
ApplyExaltedCompanion(oComp, oCompSkin);

View File

@@ -229,7 +229,7 @@ void DoDeathDependent(object oEater, object oTarget, string sResRef, string sNam
object oSlave = CreateObject(OBJECT_TYPE_CREATURE, "soul_wight_test", lSpawn);
if(GetIsObjectValid(oSlave))
{
SetMaxHenchmen(max(nMaxHenchmen, i)); // Temporarily set the number of max henchmen high enough that we can add another
SetMaxHenchmen(PRCMax(nMaxHenchmen, i)); // Temporarily set the number of max henchmen high enough that we can add another
AddHenchman(oEater, oSlave);
SetMaxHenchmen(nMaxHenchmen);

View File

@@ -148,14 +148,14 @@ void main()
// Speed increase
if(fSpeedChange > 0.0)
{
int nChange = min(99, max(0, FloatToInt(fSpeedChange * 100.0)));
int nChange = PRCMin(99, PRCMax(0, FloatToInt(fSpeedChange * 100.0)));
if(DEBUG) DoDebug("prc_speed: Applying an increase in speed: " + IntToString(nChange));
AssignCommand(oWP, ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(EffectMovementSpeedIncrease(nChange)), oPC)));
}
// Speed decrease
else if(fSpeedChange < 0.0)
{
int nChange = min(99, max(0, FloatToInt(-fSpeedChange * 100.0)));
int nChange = PRCMin(99, PRCMax(0, FloatToInt(-fSpeedChange * 100.0)));
if(DEBUG) DoDebug("prc_speed: Applying an decrease in speed: " + IntToString(nChange));
AssignCommand(oWP, ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(EffectMovementSpeedDecrease(nChange)), oPC)));
//ApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(EffectMovementSpeedDecrease(nChange)), oPC)

View File

@@ -103,7 +103,7 @@ void main()
{
// Get the highest enhancement bonus property on the item
if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_ENHANCEMENT_BONUS)
nBonus = max(nBonus, GetItemPropertyCostTableValue(ipTest));
nBonus = PRCMax(nBonus, GetItemPropertyCostTableValue(ipTest));
ipTest = GetNextItemProperty(oSmaller);
}

View File

@@ -28,7 +28,7 @@ void main()
int nDamageType = GetLocalInt(oDragon, "BarrierDamageType");
int nDiceType = GetLocalInt(oDragon, "BarrierDiceType");
int nDiceNumber = GetLocalInt(oDragon, "BarrierDiceNumber");
int nSaveDC = 10 + GetHitDice(oDragon) / 2 + max(GetAbilityModifier(ABILITY_CONSTITUTION, oDragon), 0);
int nSaveDC = 10 + GetHitDice(oDragon) / 2 + PRCMax(GetAbilityModifier(ABILITY_CONSTITUTION, oDragon), 0);
//Declare and assign personal impact visual effect.
switch(nDamageType)
{

View File

@@ -38,7 +38,7 @@ void main()
int nDamageType = GetLocalInt(oDragon, "BarrierDamageType");
int nDiceType = GetLocalInt(oDragon, "BarrierDiceType");
int nDiceNumber = GetLocalInt(oDragon, "BarrierDiceNumber");
int nSaveDC = 10 + GetHitDice(oDragon) / 2 + max(GetAbilityModifier(ABILITY_CONSTITUTION, oDragon), 0);
int nSaveDC = 10 + GetHitDice(oDragon) / 2 + PRCMax(GetAbilityModifier(ABILITY_CONSTITUTION, oDragon), 0);
//Declare and assign personal impact visual effect.
switch (nDamageType)
{

View File

@@ -54,7 +54,7 @@ void ControlledRegeneration(object oTarget, int nRegenRate)
if (nCurrentHP < nInitialHP)
{
int nHealAmount = min(nRegenRate, nInitialHP - nCurrentHP); // Ensure not to heal beyond the initial hit points
int nHealAmount = PRCMin(nRegenRate, nInitialHP - nCurrentHP); // Ensure not to heal beyond the initial hit points
if(DEBUG) DoDebug( "rs_regen_wounds > ControlledRegeneration: Healing " + IntToString(nHealAmount) + " HP.");
effect eFakeRegen = EffectHeal(nHealAmount);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eFakeRegen, oTarget);

View File

@@ -84,7 +84,7 @@ void main()
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{
//ActionCastSpell(SPELL_TOUCH_OF_IDIOCY, 5, 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, FALSE, TRUE, oTarget);
DoRacialSLA(SPELL_CHAIN_LIGHTNING, 15, max(19, 16 + GetAbilityModifier(ABILITY_CHARISMA, oPC)), TRUE);
DoRacialSLA(SPELL_CHAIN_LIGHTNING, 15, PRCMax(19, 16 + GetAbilityModifier(ABILITY_CHARISMA, oPC)), TRUE);
SetLegacyUses(oPC, nSLA);
}
}

View File

@@ -40,7 +40,7 @@ void main()
nCasterLevel = 10;
nSpell = SPELL_LIGHTNING_BOLT;
nUses = 3;
nDC = max(14, 13 + GetAbilityModifier(ABILITY_CHARISMA, oPC));
nDC = PRCMax(14, 13 + GetAbilityModifier(ABILITY_CHARISMA, oPC));
break;
}
case WOL_KAMATE_CHAIN:
@@ -48,7 +48,7 @@ void main()
nCasterLevel = 15;
nSpell = SPELL_CHAIN_LIGHTNING;
nUses = 1;
nDC = max(16, 14 + GetAbilityModifier(ABILITY_CHARISMA, oPC));
nDC = PRCMax(16, 14 + GetAbilityModifier(ABILITY_CHARISMA, oPC));
break;
}
case WOL_KAMATE_TRUE_STRIKE:

View File

@@ -40,7 +40,7 @@ void main()
nCasterLevel = 5;
nSpell = SPELL_FLARE;
nUses = 999;
nDC = max(10, 10 + GetAbilityModifier(ABILITY_CHARISMA, oPC));
nDC = PRCMax(10, 10 + GetAbilityModifier(ABILITY_CHARISMA, oPC));
break;
}
case WOL_RAVENKIND_DETECT_UNDEAD:
@@ -55,7 +55,7 @@ void main()
nCasterLevel = 10;
nSpell = SPELL_HALT_UNDEAD;
nUses = 2;
nDC = max(14, 13 + GetAbilityModifier(ABILITY_CHARISMA, oPC));
nDC = PRCMax(14, 13 + GetAbilityModifier(ABILITY_CHARISMA, oPC));
break;
}
case WOL_RAVENKIND_CURE:
@@ -63,7 +63,7 @@ void main()
nCasterLevel = 5;
nSpell = SPELL_CURE_LIGHT_WOUNDS;
nUses = 3;
nDC = max(11, 11 + GetAbilityModifier(ABILITY_CHARISMA, oPC));
nDC = PRCMax(11, 11 + GetAbilityModifier(ABILITY_CHARISMA, oPC));
break;
}
case WOL_RAVENKIND_DAYLIGHT:
@@ -92,7 +92,7 @@ void main()
nCasterLevel = 20;
nSpell = SPELL_MASS_HEAL;
nUses = 3;
nDC = max(23, 19 + GetAbilityModifier(ABILITY_CHARISMA, oPC));
nDC = PRCMax(23, 19 + GetAbilityModifier(ABILITY_CHARISMA, oPC));
break;
}
}

View File

@@ -64,7 +64,7 @@ void main()
nCasterLevel = 15;
nSpell = SPELL_BANISHMENT;
nUses = 1;
nDC = max(20, 17 + GetAbilityModifier(ABILITY_CHARISMA, oPC));
nDC = PRCMax(20, 17 + GetAbilityModifier(ABILITY_CHARISMA, oPC));
break;
}
case WOL_THAAS_TELEPORT: