#include "prc_feat_const"
#include "prc_spell_const"

void main()
{

   if (!GetHasFeat(FEAT_EPIC_DIVINE_VIGOR, OBJECT_SELF))
   {
     if(GetHasFeatEffect(FEAT_DIVINE_VIGOR) == FALSE )
     {
        if (!GetHasFeat(FEAT_TURN_UNDEAD, OBJECT_SELF))
        {
            SpeakStringByStrRef(40550);
           return;
        }
        DecrementRemainingFeatUses(OBJECT_SELF, FEAT_TURN_UNDEAD);
     }

   }
   else
   {
     effect eDur2 = EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MINOR);
     ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur2, OBJECT_SELF,TurnsToSeconds(5));
     return;
   }


   int nTouch = GetAbilityModifier(ABILITY_CHARISMA)<1 ? 1 : GetAbilityModifier(ABILITY_CHARISMA);
   int nResistance = 5;
   int iCon = 2;
   int iSpeed = 10;

   effect eDur = EffectVisualEffect(VFX_DUR_PROTECTION_EVIL_MINOR);
   effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
   effect eVis = EffectVisualEffect(VFX_IMP_HEAD_HEAL);

   //Link Effects
   effect eCon =EffectAbilityIncrease(ABILITY_CONSTITUTION,iCon);
   effect eSpeed =EffectMovementSpeedIncrease(iSpeed);

   effect eLink = EffectLinkEffects(eCon, eDur);
          eLink = EffectLinkEffects(eLink, eSpeed);
            eLink = EffectLinkEffects(eLink, eDur2);

   //Apply the VFX impact and effects
   ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, OBJECT_SELF, TurnsToSeconds(nTouch));
   ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
}