PRC8_fork/nwn/nwnprc/trunk/smp/phs_s_shieldoth.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

101 lines
4.1 KiB
Plaintext

/*:://////////////////////////////////////////////
//:: Spell Name Shield Other
//:: Spell FileName PHS_S_ShieldOth
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Range: Close (8M)
Target: One creature
Duration: 1 hour/level (D)
This spell wards the subject and creates a mystic connection between you and
the subject so that some of its wounds are transferred to you. The subject
gains a +1 deflection bonus to AC and a +1 resistance bonus on saves.
Additionally, the subject takes only half damage from all magical damaging
attacks that deal hit point damage. The amount of damage not taken by the
warded creature is taken by you. Forms of harm that do not involve hit points,
such as charm effects, temporary ability damage, level draining, and death
effects, are not affected. If the subject suffers a reduction of hit points
from a lowered Constitution score, the reduction is not split with you
because it is not hit point damage. When the spell ends, subsequent damage
is no longer divided between the subject and you, but damage already split
is not reassigned to the subject.
If you and the subject of the spell move out of range of each other, the
spell ends.
Focus: A pair of platinum rings (worth at least 50 gp each) worn by both you
and the warded creature.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Changed somewhat:
- Only divides up direct magical damage
- No monster spells affected
No phisical damage is split either. Its still quite powerful (and, there is
always the AC bonuses!)
Needs a new AOE for the caster, and a VFX for the target. The AOE is actually
totally invisible, and is just 8M diameter. If the person with the shield
other effects moves out of the spells range, ie, out of the AOE, it gets
instantly removed.
Only one shield other can ever be applied to any target. It'll remove the
effects from the target, and the creator of the targets spell effects too.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
void main()
{
// Spell Hook Check.
if(!PHS_SpellHookCheck(PHS_SPELL_SHIELD_OTHER)) return;
// Declare Major Variables
object oCaster = OBJECT_SELF;
object oTarget = GetSpellTargetObject();
object oRemoveCreator = PHS_FirstCasterOfSpellEffect(PHS_SPELL_SHIELD_OTHER, oTarget);
int nCasterLevel = PHS_GetCasterLevel();
int nMetaMagic = PHS_GetMetaMagicFeat();
// Cannot target self
if(oTarget == oCaster) return;
// 1 Hour/level
float fDuration = PHS_GetDuration(PHS_HOURS, nCasterLevel, nMetaMagic);
// Delcare effects
effect eVis = EffectVisualEffect(VFX_IMP_AC_BONUS);
effect eAC = EffectACIncrease(1, AC_DEFLECTION_BONUS);
effect eSave = EffectSavingThrowIncrease(SAVING_THROW_ALL, 1, SAVING_THROW_TYPE_ALL);
effect eDur = EffectVisualEffect(PHS_VFX_DUR_SHIELD_OTHER);
effect eCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eAOE = EffectAreaOfEffect(PHS_AOE_MOB_SHIELD_OTHER);
// Link effects for target
effect eLink = EffectLinkEffects(eAC, eDur);
eLink = EffectLinkEffects(eLink, eSave);
eLink = EffectLinkEffects(eLink, eCessate);
// remove previous castings from the creator of the spell on the target
if(GetIsObjectValid(oRemoveCreator))
{
// Remove previous castings
PHS_RemoveSpellEffectsFromTarget(PHS_SPELL_SHIELD_OF_FAITH, oRemoveCreator);
}
// Remove previous castings
PHS_RemoveSpellEffectsFromTarget(PHS_SPELL_SHIELD_OF_FAITH, oTarget);
// Signal spell cast at
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_SHIELD_OF_FAITH, FALSE);
PHS_SignalSpellCastAt(oCaster, PHS_SPELL_SHIELD_OF_FAITH, FALSE);
// Apply effects
PHS_ApplyDurationAndVFX(oCaster, eVis, eAOE, fDuration);
PHS_ApplyDurationAndVFX(oTarget, eVis, eLink, fDuration);
}