#include "prc_inc_spells"

void main()
{
	// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
	if (!X2PreSpellCastCode()) return;
    
	PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
	
	// Get the target and raise the spell cast event.
	object oTarget = PRCGetSpellTargetObject();
	PRCSignalSpellEvent(oTarget, FALSE);

	// Determine the spell's duration, taking metamagic feats into account.
	int nCasterLvl = PRCGetCasterLevel(OBJECT_SELF);
	float fDuration = PRCGetMetaMagicDuration(RoundsToSeconds(nCasterLvl));

	// Calculate the proper DR.	
	int nDR = 5;
	if (nCasterLvl >= 12) nDR = 10;
	if (nCasterLvl >= 15) nDR = 15;
	
	// Create the chain of buffs to apply, including the vfx.
	effect eBuff = EffectAbilityIncrease(ABILITY_STRENGTH, 8);
	eBuff = EffectLinkEffects (eBuff, EffectAbilityIncrease(ABILITY_CONSTITUTION, 4));
	eBuff = EffectLinkEffects (eBuff, EffectACIncrease(4, AC_NATURAL_BONUS));
	eBuff = EffectLinkEffects (eBuff, EffectDamageReduction(nDR, DAMAGE_POWER_PLUS_TWO));
	eBuff = EffectLinkEffects (eBuff, EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MAJOR));
	
	SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3), oTarget);
	SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBuff, oTarget, fDuration,TRUE,-1,nCasterLvl);
//	SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_RESTORATION_GREATER), oTarget);

	PRCSetSchool();
}