PRC8/nwn/nwnprc/trunk/spells/nw_s0_barkskin.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

95 lines
3.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//::///////////////////////////////////////////////
//:: Barkskin
//:: nw_s0_barkskin.nss
//::///////////////////////////////////////////////
/*
Transmutation
Level: Drd 2, Rgr 2, Plant 2
Components: V, S, DF
Casting Time: 1 standard action
Range: Touch
Target: Living creature touched
Duration: 10 min./level
Saving Throw: None
Spell Resistance: Yes (harmless)
Barkskin toughens a creatures skin. The effect
grants a +2 enhancement bonus to the creatures
existing natural armor bonus. This enhancement
bonus increases by 1 for every three caster levels
above 3rd, to a maximum of +5 at caster level 12th.
The enhancement bonus provided by barkskin stacks
with the targets natural armor bonus, but not with
other enhancement bonuses to natural armor. A
creature without natural armor has an effective
natural armor bonus of +0.
*/
//:://////////////////////////////////////////////
//:: By: Preston Watamaniuk
//:: Created: Feb 21, 2001
//:: Modified: Jun 12, 2006
//:://////////////////////////////////////////////
#include "prc_sp_func"
int DoSpell(object oCaster, object oTarget, int nCasterLevel)
{
if(!PRCGetIsAliveCreature(oTarget))
{
FloatingTextStringOnCreature("Selected target is not a living creature.", oCaster, FALSE);
return FALSE;
}
float fDuration = TurnsToSeconds(nCasterLevel) * 10;
//Enter Metamagic conditions
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) //Duration is +100%
fDuration *= 2;
//Determine AC Bonus based Level.
int nBonus = (nCasterLevel / 3) + 1;
if(nBonus > 5)
nBonus = 5;
//Make sure the Armor Bonus is of type Natural
effect eLink = EffectACIncrease(nBonus, AC_NATURAL_BONUS);
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_PROT_BARKSKIN));
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE));
effect eHead = EffectVisualEffect(VFX_IMP_HEAD_NATURE);
//Signal spell cast at event
SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_BARKSKIN, FALSE));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDuration, TRUE, SPELL_BARKSKIN, nCasterLevel);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHead, oTarget);
return TRUE; //return TRUE if spell charges should be decremented
}
void main()
{
if (!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oTarget = PRCGetSpellTargetObject();
int nCasterLevel = PRCGetCasterLevel();
int nEvent = GetLocalInt(OBJECT_SELF, PRC_SPELL_EVENT); //use bitwise & to extract flags
if(!nEvent) //normal cast
{
if(GetLocalInt(OBJECT_SELF, PRC_SPELL_HOLD) && OBJECT_SELF == oTarget)
{ //holding the charge, casting spell on self
SetLocalSpellVariables(OBJECT_SELF, 1); //change 1 to number of charges
return;
}
DoSpell(OBJECT_SELF, oTarget, nCasterLevel);
}
else
{
if(nEvent & PRC_SPELL_EVENT_ATTACK)
{
if(DoSpell(OBJECT_SELF, oTarget, nCasterLevel))
DecrementSpellCharges(OBJECT_SELF);
}
}
PRCSetSchool();
}