#include "prc_feat_const"

const string BRUTAL_STRIKE_MODE_VAR = "PRC_BRUTAL_STRIKE_MODE";

int _prc_inc_hextor_BrutalStrikeFeatCount(object oPC)
{
    if(GetHasFeat(FEAT_BSTRIKE_12, oPC))
        return 12;
    else if (GetHasFeat(FEAT_BSTRIKE_11, oPC))
        return 11;
    else if (GetHasFeat(FEAT_BSTRIKE_10, oPC))
        return 10;
    else if (GetHasFeat(FEAT_BSTRIKE_9, oPC))
        return 9;
    else if (GetHasFeat(FEAT_BSTRIKE_8, oPC))
        return 8;
    else if (GetHasFeat(FEAT_BSTRIKE_7, oPC))
        return 7;
    else if (GetHasFeat(FEAT_BSTRIKE_6, oPC))
        return 6;
    else if (GetHasFeat(FEAT_BSTRIKE_5, oPC))
        return 5;
    else if (GetHasFeat(FEAT_BSTRIKE_4, oPC))
        return 4;
    else if (GetHasFeat(FEAT_BSTRIKE_3, oPC))
        return 3;
    else if (GetHasFeat(FEAT_BSTRIKE_2, oPC))
        return 2;
    else if (GetHasFeat(FEAT_BSTRIKE_1, oPC))
        return 1;

    return 0;
}

void _prc_inc_hextor_ApplyBrutalStrike(object oPC, int nBonus)
{
    object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
    if (!GetIsObjectValid(oWeap))
    {
        oWeap = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC);
        if (!GetIsObjectValid(oWeap))
        {
            oWeap = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC);
            if (!GetIsObjectValid(oWeap))
                oWeap = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oPC);
        }
    }
    int nDamageType = (!GetIsObjectValid(oWeap)) ? DAMAGE_TYPE_BLUDGEONING : GetItemDamageType(oWeap);

    effect eBrutalStrike;
    if (GetLocalInt(oPC, BRUTAL_STRIKE_MODE_VAR))
        eBrutalStrike = EffectAttackIncrease(nBonus);
    else
        eBrutalStrike = EffectDamageIncrease(nBonus, nDamageType);
    eBrutalStrike = ExtraordinaryEffect(eBrutalStrike);
    
    PRCRemoveEffectsFromSpell(oPC, SPELL_HEXTOR_DAMAGE);
    PRCRemoveEffectsFromSpell(oPC, SPELL_HEXTOR_MODE);

    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBrutalStrike, oPC);
}