Finished Invocations for Ability focus

Finished the rest of the Invocations for Ability focus.
This commit is contained in:
Jaysyn904 2025-05-13 23:36:44 -04:00
parent 2caeb8941c
commit 3a362d25be
8 changed files with 36 additions and 10 deletions

View File

@ -27,6 +27,10 @@ void main()
int CasterLvl = GetInvokerLevel(oCaster, GetInvokingClass()); int CasterLvl = GetInvokerLevel(oCaster, GetInvokingClass());
int nPenetr = CasterLvl + SPGetPenetr(); int nPenetr = CasterLvl + SPGetPenetr();
int iAttackRoll = PRCDoMeleeTouchAttack(oTarget); int iAttackRoll = PRCDoMeleeTouchAttack(oTarget);
int nDC = GetInvocationSaveDC(oTarget, oCaster);
if (GetHasFeat(FEAT_ABFOC_CURSE_OF_DESPAIR, OBJECT_SELF)) nDC += 2;
int dec = 2 * iAttackRoll;//4 on Critical Hit int dec = 2 * iAttackRoll;//4 on Critical Hit
effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE); effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
effect eCurse = EffectCurse(dec, dec, dec, dec, dec, dec); effect eCurse = EffectCurse(dec, dec, dec, dec, dec, dec);
@ -43,7 +47,7 @@ void main()
if (!PRCDoResistSpell(oCaster, oTarget, nPenetr)) if (!PRCDoResistSpell(oCaster, oTarget, nPenetr))
{ {
//Make Will Save //Make Will Save
if (!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetInvocationSaveDC(oTarget, oCaster))) if (!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC))
{ {
//Apply Effect and VFX //Apply Effect and VFX
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eCurse, oTarget, 0.0f, TRUE, -1, CasterLvl); SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eCurse, oTarget, 0.0f, TRUE, -1, CasterLvl);

View File

@ -26,9 +26,6 @@ void main()
location lTarget = PRCGetSpellTargetLocation(); location lTarget = PRCGetSpellTargetLocation();
int CasterLvl = GetInvokerLevel(oCaster, GetInvokingClass()); int CasterLvl = GetInvokerLevel(oCaster, GetInvokingClass());
int nPenetr = CasterLvl + SPGetPenetr(); int nPenetr = CasterLvl + SPGetPenetr();
int nDC = GetInvocationSaveDC(oTarget, oCaster);
if (GetHasFeat(FEAT_ABFOC_DEAFENING_ROAR, oCaster)) nDC += 2;
float fDelay; float fDelay;
effect eDeaf = EffectDeaf(); effect eDeaf = EffectDeaf();
@ -42,6 +39,10 @@ void main()
object oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, FeetToMeters(30.0), lTarget, TRUE, OBJECT_TYPE_CREATURE, GetPosition(oCaster)); object oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, FeetToMeters(30.0), lTarget, TRUE, OBJECT_TYPE_CREATURE, GetPosition(oCaster));
while(GetIsObjectValid(oTarget)) while(GetIsObjectValid(oTarget))
{ {
int nDC = GetInvocationSaveDC(oTarget, oCaster);
if (GetHasFeat(FEAT_ABFOC_DEAFENING_ROAR, oCaster)) nDC += 2;
if(oTarget != oCaster && !GetIsReactionTypeFriendly(oTarget)) if(oTarget != oCaster && !GetIsReactionTypeFriendly(oTarget))
{ {
fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20; fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;

View File

@ -40,8 +40,12 @@ void main()
//Get first target in the spell cone //Get first target in the spell cone
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fRange, lTarget, TRUE, OBJECT_TYPE_CREATURE, GetPosition(oCaster)); object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fRange, lTarget, TRUE, OBJECT_TYPE_CREATURE, GetPosition(oCaster));
while(GetIsObjectValid(oTarget)) while(GetIsObjectValid(oTarget))
{ {
int nDC = GetInvocationSaveDC(oTarget, oCaster);
if (GetHasFeat(FEAT_ABFOC_FRIGHTFUL_PRESENCE, OBJECT_SELF)) nDC += 2;
if(spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF) if(spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF)
&& MyPRCGetRacialType(oTarget)!= RACIAL_TYPE_DRAGON) && MyPRCGetRacialType(oTarget)!= RACIAL_TYPE_DRAGON)
{ {
@ -52,7 +56,7 @@ void main()
if(!PRCDoResistSpell(oCaster, oTarget, nPenetr, fDelay)) if(!PRCDoResistSpell(oCaster, oTarget, nPenetr, fDelay))
{ {
//Make a will save - if failed, shaken for 10 minutes //Make a will save - if failed, shaken for 10 minutes
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetInvocationSaveDC(oTarget, oCaster), SAVING_THROW_TYPE_FEAR, oCaster, fDelay)) if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, oCaster, fDelay))
{ {
//Apply the linked effects and the VFX impact //Apply the linked effects and the VFX impact
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, TurnsToSeconds(10), TRUE, -1, CasterLvl)); DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, TurnsToSeconds(10), TRUE, -1, CasterLvl));

View File

@ -36,8 +36,14 @@ void main()
//Get first target in the spell cylinder //Get first target in the spell cylinder
object oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, fRange, lTarget, object oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, fRange, lTarget,
TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, GetPosition(OBJECT_SELF)); TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, GetPosition(OBJECT_SELF));
while(GetIsObjectValid(oTarget)) while(GetIsObjectValid(oTarget))
{ {
int nDC = GetInvocationSaveDC(oTarget, oCaster);
if (GetHasFeat(FEAT_ABFOC_SCALDING_GUST, OBJECT_SELF)) nDC += 2;
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster)) if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster))
{ {
fDelay = GetDistanceBetween(oCaster, oTarget)/20; fDelay = GetDistanceBetween(oCaster, oTarget)/20;
@ -47,7 +53,7 @@ void main()
if(!PRCDoResistSpell(oCaster, oTarget, nPenetr, fDelay)) if(!PRCDoResistSpell(oCaster, oTarget, nPenetr, fDelay))
{ {
if(PRCGetCreatureSize(oTarget) < CREATURE_SIZE_MEDIUM) if(PRCGetCreatureSize(oTarget) < CREATURE_SIZE_MEDIUM)
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, GetInvocationSaveDC(oTarget, oCaster), SAVING_THROW_TYPE_NONE)) if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
{ {
effect eWindblown = EffectKnockdown(); effect eWindblown = EffectKnockdown();
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eWindblown, oTarget, 6.0)); DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eWindblown, oTarget, 6.0));

View File

@ -50,8 +50,12 @@ void main()
//Get first target in the spell cone //Get first target in the spell cone
object oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, fRange, lTarget, TRUE, OBJECT_TYPE_CREATURE, GetPosition(OBJECT_SELF)); object oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, fRange, lTarget, TRUE, OBJECT_TYPE_CREATURE, GetPosition(OBJECT_SELF));
while(GetIsObjectValid(oTarget)) while(GetIsObjectValid(oTarget))
{ {
int nDC = GetInvocationSaveDC(oTarget, oCaster);
if (GetHasFeat(FEAT_ABFOC_TERRIFYING_ROAR, OBJECT_SELF)) nDC += 2;
if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster) if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster)
&& !(GetHitDice(oTarget) > CasterLvl)) && !(GetHitDice(oTarget) > CasterLvl))
{ {
@ -62,7 +66,7 @@ void main()
if(!PRCDoResistSpell(oCaster, oTarget, nPenetr, fDelay)) if(!PRCDoResistSpell(oCaster, oTarget, nPenetr, fDelay))
{ {
//Make a will save - if failed, panicked //Make a will save - if failed, panicked
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetInvocationSaveDC(oTarget, oCaster), SAVING_THROW_TYPE_FEAR, oCaster, fDelay)) if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, oCaster, fDelay))
{ {
//Apply the linked effects and the VFX impact //Apply the linked effects and the VFX impact
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0, TRUE, -1, CasterLvl)); DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0, TRUE, -1, CasterLvl));

View File

@ -11,6 +11,8 @@ void main()
object oTarget = GetEnteringObject(); object oTarget = GetEnteringObject();
int CasterLvl = GetInvokerLevel(GetAreaOfEffectCreator(), CLASS_TYPE_WARLOCK); int CasterLvl = GetInvokerLevel(GetAreaOfEffectCreator(), CLASS_TYPE_WARLOCK);
int nDC = GetInvocationSaveDC(oTarget, GetAreaOfEffectCreator(),INVOKE_ENERVATING_SHADOW); int nDC = GetInvocationSaveDC(oTarget, GetAreaOfEffectCreator(),INVOKE_ENERVATING_SHADOW);
if (GetHasFeat(FEAT_ABFOC_ENERVATING_SHADOW, OBJECT_SELF)) nDC += 2;
effect eConceal = EffectConcealment(20); effect eConceal = EffectConcealment(20);
effect eStrength = EffectAbilityDecrease(ABILITY_STRENGTH, 4); effect eStrength = EffectAbilityDecrease(ABILITY_STRENGTH, 4);
effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE); effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);

View File

@ -15,8 +15,11 @@ void main()
SignalEvent(oTarget, EventSpellCastAt(GetAreaOfEffectCreator(), SignalEvent(oTarget, EventSpellCastAt(GetAreaOfEffectCreator(),
INVOKE_NIGHTMARES_MADE_REAL)); INVOKE_NIGHTMARES_MADE_REAL));
int nDC = GetInvocationSaveDC(oTarget, GetAreaOfEffectCreator(), INVOKE_NIGHTMARES_MADE_REAL);
if (GetHasFeat(FEAT_ABFOC_NIGHTMARES_MADE_REAL, OBJECT_SELF)) nDC += 2;
//save //save
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetInvocationSaveDC(oTarget, GetAreaOfEffectCreator(), INVOKE_NIGHTMARES_MADE_REAL), SAVING_THROW_TYPE_SPELL)) if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_SPELL))
{ {
effect eEntangle = EffectLinkEffects(EffectEntangle(), EffectVisualEffect(VFX_DUR_ENTANGLE)); effect eEntangle = EffectLinkEffects(EffectEntangle(), EffectVisualEffect(VFX_DUR_ENTANGLE));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEntangle, oTarget, RoundsToSeconds(nCasterLevel)); SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEntangle, oTarget, RoundsToSeconds(nCasterLevel));

View File

@ -13,6 +13,8 @@ void main()
object oCaster = GetAreaOfEffectCreator(); object oCaster = GetAreaOfEffectCreator();
int nCasterLvl = GetInvokerLevel(oCaster, CLASS_TYPE_WARLOCK); int nCasterLvl = GetInvokerLevel(oCaster, CLASS_TYPE_WARLOCK);
int nDC = GetInvocationSaveDC(oTarget, oCaster, INVOKE_WALL_OF_GLOOM); int nDC = GetInvocationSaveDC(oTarget, oCaster, INVOKE_WALL_OF_GLOOM);
if (GetHasFeat(FEAT_ABFOC_WALL_OF_GLOOM, OBJECT_SELF)) nDC += 2;
effect eConceal = EffectConcealment(50); effect eConceal = EffectConcealment(50);
effect eHalt = EffectMovementSpeedDecrease(99); effect eHalt = EffectMovementSpeedDecrease(99);