//::///////////////////////////////////////////////
//:: Sohei
//:: prc_sohei.nss
//:://////////////////////////////////////////////
//:: Applies the passive bonuses from sohei
//:://////////////////////////////////////////////
//:: Created By: Stratovarius
//:: Created On: Sept 11, 2006
//:://////////////////////////////////////////////

#include "prc_alterations"
#include "x0_i0_modes"

void SoheiDamageResist(object oPC, object oSkin, int nLevel)
{
    if(GetLocalInt(oSkin, "SoheiDamageResist") == nLevel) return;

    int nDR;
    if (nLevel >= 38) nDR = IP_CONST_DAMAGERESIST_10;
    else if (nLevel >= 35) nDR = IP_CONST_DAMAGERESIST_9;
    else if (nLevel >= 32) nDR = IP_CONST_DAMAGERESIST_8;
    else if (nLevel >= 29) nDR = IP_CONST_DAMAGERESIST_7;
    else if (nLevel >= 26) nDR = IP_CONST_DAMAGERESIST_6;
    else if (nLevel >= 23) nDR = IP_CONST_DAMAGERESIST_5;
    else if (nLevel >= 20) nDR = IP_CONST_DAMAGERESIST_4;
    else if (nLevel >= 17) nDR = IP_CONST_DAMAGERESIST_3;
    else if (nLevel >= 14) nDR = IP_CONST_DAMAGERESIST_2;
    else if (nLevel >= 11) nDR = IP_CONST_DAMAGERESIST_1;

    AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_PIERCING, nDR), oSkin);
    AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SLASHING, nDR), oSkin);
    AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_BLUDGEONING, nDR), oSkin);
    SetLocalInt(oSkin, "SoheiDamageResist", nLevel);
}

void main()
{
    int nEvent = GetRunningEvent();
    object oPC = OBJECT_SELF;

    if(nEvent == FALSE)
    {
        object oSkin = GetPCSkin(oPC);
        int nSoh = GetLevelByClass(CLASS_TYPE_SOHEI, oPC);

        if(nSoh >= 3)
            SoheiDamageResist(oPC, oSkin, nSoh);

        /* x - moved to prc_feats.nss
        if(nSoh >= 5)
        {
            // Gains immunity to stunning
            // Can't be done as an iprop, so we effect bomb
            effect eStun = EffectImmunity(IMMUNITY_TYPE_STUN);
            effect eSleep = EffectImmunity(IMMUNITY_TYPE_SLEEP);
            // No Dispelling, and no going away on rest
            eStun = EffectLinkEffects(eStun, eSleep);
            eStun = SupernaturalEffect(eStun);
            ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStun, oPC);
        }*/

        //Defensive Strike
        if(nSoh >= 7 && GetHasFeat(FEAT_EXPERTISE, oPC))
        {
            if(DEBUG) DoDebug("prc_sohei: Adding eventhooks");
            AddEventScript(oPC, EVENT_ONHEARTBEAT, "prc_sohei", TRUE, FALSE);
        }
    }
    // We're being called from the OnHeartbeat eventhook, so check or skip
    else if(nEvent == EVENT_ONHEARTBEAT)
    {
        // Only applies when using expertise
        if(GetModeActive(ACTION_MODE_EXPERTISE) || GetActionMode(oPC, ACTION_MODE_EXPERTISE) || GetLastAttackMode(oPC) == COMBAT_MODE_EXPERTISE ||
           GetModeActive(ACTION_MODE_IMPROVED_EXPERTISE) || GetActionMode(oPC, ACTION_MODE_IMPROVED_EXPERTISE) || GetLastAttackMode(oPC) == COMBAT_MODE_IMPROVED_EXPERTISE)
        {
           effect eAtk = EffectAttackIncrease(4);
           ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAtk, oPC, 6.0);
        }
    }// end if - Running OnHeart event
}