//::///////////////////////////////////////////////
//:: Divine Strength
//:: NW_S2_DivStr
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    Cleric gains +2 to strength +1 for every 3 levels
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Nov 4, 2001
//:://////////////////////////////////////////////
#include "prc_alterations"

void main()
{
    //Declare major variables
    object oTarget = PRCGetSpellTargetObject();
    effect eStr;
    effect eVis = EffectVisualEffect(VFX_IMP_HOLY_AID);
    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);

    int nCasterLvl = GetLevelByClass(CLASS_TYPE_CLERIC);
    int nContend = GetLevelByClass(CLASS_TYPE_CLERIC) + GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD);

    int nContendSurge;
    int nFeat;
    int nSurge;

    nFeat = (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD) >= 1) ? nContend:0;
    nFeat = (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD) >= 7) ? FloatToInt(nContend*1.5):nContend;

    if(nFeat > 0)
        nSurge = (nFeat/3) + 2;

    int nModify = (nCasterLvl/3) + 2;
    int nDuration = 5 + GetAbilityModifier(ABILITY_CHARISMA);

    nContendSurge = (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD) >= 1) ? 1:0;
    nContendSurge = (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD) >= 3) ? (d4(1) + 1):1;
    nContendSurge = (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD) == 10) ? nDuration:(d4(1) + 1);

    //Fire cast spell at event for the specified target
    SignalEvent(OBJECT_SELF, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_DIVINE_STRENGTH, FALSE));

    //Apply effects and VFX to target
    eStr = EffectAbilityIncrease(ABILITY_STRENGTH,nModify);
    effect eSurge = EffectAbilityIncrease(ABILITY_STRENGTH,nSurge);
    effect eLink = EffectLinkEffects(eStr, eDur);

    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSurge, oTarget, RoundsToSeconds(nContendSurge));
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
}