PRC8/nwn/nwnprc/trunk/smp/phs_s_prayer.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

122 lines
4.8 KiB
Plaintext

/*:://////////////////////////////////////////////
//:: Spell Name Prayer
//:: Spell FileName PHS_S_Prayer
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Enchantment (Compulsion) [Mind-Affecting]
Level: Clr 3, Pal 3
Components: V, S, DF
Casting Time: 1 standard action
Range: 13.33M. (40-ft)
Area: All allies and foes within a 13.33M-radius (40-ft.) burst centered on you
Duration: 1 round/level
Saving Throw: None
Spell Resistance: Yes
You bring special favor upon yourself and your allies while bringing disfavor
to your enemies. You and your each of your allies gain a +1 bonus on attack
rolls, weapon damage rolls, saves, and skill checks, while each of your foes
takes a -1 penalty on such rolls.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Larger AOE then any of the current AOE's for bless ETC.
Easy to do though.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
void main()
{
// Spell hook check.
if(PHS_SpellHookCheck(PHS_SPELL_PRAYER)) return;
// Define ourselves.
object oCaster = OBJECT_SELF;
object oTarget;
location lSelf = GetLocation(oCaster);
int nCasterLevel = PHS_GetCasterLevel();
int nMetaMagic = PHS_GetMetaMagicFeat();
float fDelay;
// Duration - 1 round/level
float fDuration = PHS_GetDuration(PHS_ROUNDS, nCasterLevel, nMetaMagic);
// Effect - attack +1, +1 saves, +1 damage, +1 skills
effect eVis = EffectVisualEffect(VFX_IMP_HEAD_HOLY);
effect eAttack = EffectAttackIncrease(1);
effect eMorale = EffectSavingThrowIncrease(SAVING_THROW_ALL, 1);
effect eSkill = EffectSkillIncrease(SKILL_ALL_SKILLS, 1);
effect eDam = EffectDamageIncrease(1, DAMAGE_TYPE_DIVINE);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
// Link effects
effect eLink = EffectLinkEffects(eAttack, eMorale);
eLink = EffectLinkEffects(eLink, eDur);
eLink = EffectLinkEffects(eLink, eSkill);
eLink = EffectLinkEffects(eLink, eDam);
// Bad effects - minus the above.
effect eBadVis = EffectVisualEffect(VFX_IMP_HEAD_HOLY);
effect eBadAttack = EffectAttackDecrease(1);
effect eBadMorale = EffectSavingThrowDecrease(SAVING_THROW_ALL, 1, SAVING_THROW_TYPE_FEAR);
effect eBadSkill = EffectSkillDecrease(SKILL_ALL_SKILLS, 1);
effect eBadDam = EffectDamageDecrease(1, DAMAGE_TYPE_DIVINE);
effect eBadDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
// Link effects
effect eBadLink = EffectLinkEffects(eBadAttack, eBadMorale);
eBadLink = EffectLinkEffects(eBadLink, eBadDur);
eBadLink = EffectLinkEffects(eBadLink, eBadSkill);
eBadLink = EffectLinkEffects(eBadLink, eBadDam);
// Apply AOE visual
effect eImpact = EffectVisualEffect(PHS_VFX_FNF_LOS_HOLY_50);
PHS_ApplyLocationVFX(lSelf, eImpact);
// Loop allies - and apply the effects.
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_FEET_50, lSelf);
while(GetIsObjectValid(oTarget))
{
// Make sure they are not immune to spells
if(!PHS_TotalSpellImmunity(oTarget))
{
// Check if ally or enemy
if(GetIsFriend(oTarget) || GetFactionEqual(oTarget) || oTarget == oCaster)
{
//Fire cast spell at event for the specified target
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_PRAYER, FALSE);
// Delay for visuals and effects.
fDelay = GetDistanceBetween(oCaster, oTarget)/20;
// Remove previous GOOD effects
PHS_RemoveSpecificEffectFromSpell(EFFECT_TYPE_ATTACK_INCREASE, PHS_SPELL_PRAYER, oTarget);
// Apply the VFX impact and effects
DelayCommand(fDelay, PHS_ApplyVFX(oTarget, eVis));
PHS_ApplyDuration(oTarget, eLink, fDuration);
}
else
{
// Enemy/Non-friend
//Fire cast spell at event for the specified target
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_PRAYER, TRUE);
// Delay for visuals and effects.
fDelay = GetDistanceBetween(oCaster, oTarget)/20;
// Remove previous BAD effects
PHS_RemoveSpecificEffectFromSpell(EFFECT_TYPE_ATTACK_DECREASE, PHS_SPELL_PRAYER, oTarget);
// Apply the VFX impact and effects
DelayCommand(fDelay, PHS_ApplyVFX(oTarget, eBadVis));
PHS_ApplyDuration(oTarget, eBadLink, fDuration);
}
}
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_FEET_50, lSelf);
}
}