#include "prc_compan_inc"
#include "pnp_shft_poly"
#include "prc_inc_dragsham"

void main()
{
    object oPC = OBJECT_SELF;
    object oSkin = GetPCSkin(oPC);
    int nTotem = GetLocalInt(oPC, "DragonShamanTotem");

    if(!nTotem)
    {
        nTotem = GetHasFeat(FEAT_DRAGONSHAMAN_BLACK, oPC)  ? FEAT_DRAGONSHAMAN_BLACK:
                 GetHasFeat(FEAT_DRAGONSHAMAN_BLUE, oPC)   ? FEAT_DRAGONSHAMAN_BLUE:
                 GetHasFeat(FEAT_DRAGONSHAMAN_BRASS, oPC)  ? FEAT_DRAGONSHAMAN_BRASS:
                 GetHasFeat(FEAT_DRAGONSHAMAN_BRONZE, oPC) ? FEAT_DRAGONSHAMAN_BRONZE:
                 GetHasFeat(FEAT_DRAGONSHAMAN_COPPER, oPC) ? FEAT_DRAGONSHAMAN_COPPER:
                 GetHasFeat(FEAT_DRAGONSHAMAN_GOLD, oPC)   ? FEAT_DRAGONSHAMAN_GOLD:
                 GetHasFeat(FEAT_DRAGONSHAMAN_GREEN, oPC)  ? FEAT_DRAGONSHAMAN_GREEN:
                 GetHasFeat(FEAT_DRAGONSHAMAN_SILVER, oPC) ? FEAT_DRAGONSHAMAN_SILVER:
                 GetHasFeat(FEAT_DRAGONSHAMAN_WHITE, oPC)  ? FEAT_DRAGONSHAMAN_WHITE:
                 //GetHasFeat(FEAT_DRAGONSHAMAN_RED, oPC)    ? FEAT_DRAGONSHAMAN_RED:// no other totems so Red Dragon will be our default
                 FEAT_DRAGONSHAMAN_RED;//default value - no other totem dragons found

        SetLocalInt(oPC, "DragonShamanTotem", nTotem);
    }

    if(GetHasFeat(FEAT_SHAMANIC_INVOCATION, oPC))
        ExecuteScript("prc_amagsys_gain", oPC);

    // For Draconic Resolve
    if(GetHasFeat(FEAT_DRAGONSHAMAN_RESOLVE, oPC))
    {
        IPSafeAddItemProperty(oSkin, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_PARALYSIS), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
        IPSafeAddItemProperty(oSkin, ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
        IPSafeAddItemProperty(oSkin, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_FEAR), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
    }

    // For Draconic Armor
    if(GetHasFeat(FEAT_DRAGONSHAMAN_ARMOR, oPC))
    {
        int nBonus = (GetLevelByClass(CLASS_TYPE_DRAGON_SHAMAN, oPC) - 2) / 5;//+1 every 5 levels starting at lvl 7
        SetCompositeBonus(oSkin, "ScaleThicken", nBonus, ITEM_PROPERTY_AC_BONUS);
    }

    //For Energy Immunity
    if(GetHasFeat(FEAT_DRAGONSHAMAN_ENERGY_IMMUNITY, oPC))
    {
        int nDamageType = GetDragonDamageType(nTotem);
        int iIP;

        switch(nDamageType)
        {
            case DAMAGE_TYPE_FIRE:       iIP = IP_CONST_DAMAGETYPE_FIRE; break;
            case DAMAGE_TYPE_ELECTRICAL: iIP = IP_CONST_DAMAGETYPE_ELECTRICAL; break;
            case DAMAGE_TYPE_ACID:       iIP = IP_CONST_DAMAGETYPE_ACID; break;
            case DAMAGE_TYPE_COLD:       iIP = IP_CONST_DAMAGETYPE_COLD; break;
        }

        IPSafeAddItemProperty(oSkin, ItemPropertyDamageImmunity(iIP, IP_CONST_DAMAGEIMMUNITY_100_PERCENT), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
    }

    if(GetHasFeat(FEAT_DRAGONSHAMAN_WINGS, oPC) && !GetPersistantLocalInt(oPC, "DragShamanWingsApplied"))
    {
        int nWingType = nTotem == FEAT_DRAGONSHAMAN_BLACK   ? PRC_WING_TYPE_DRAGON_BLACK:
                      nTotem == FEAT_DRAGONSHAMAN_BLUE      ? PRC_WING_TYPE_DRAGON_BLUE:
                      nTotem == FEAT_DRAGONSHAMAN_BRASS     ? PRC_WING_TYPE_DRAGON_BRASS:
                      nTotem == FEAT_DRAGONSHAMAN_BRONZE    ? PRC_WING_TYPE_DRAGON_BRONZE:
                      nTotem == FEAT_DRAGONSHAMAN_COPPER    ? PRC_WING_TYPE_DRAGON_COPPER:
                      nTotem == FEAT_DRAGONSHAMAN_GOLD      ? PRC_WING_TYPE_DRAGON_GOLD:
                      nTotem == FEAT_DRAGONSHAMAN_GREEN     ? PRC_WING_TYPE_DRAGON_GREEN:
                      nTotem == FEAT_DRAGONSHAMAN_SILVER    ? PRC_WING_TYPE_DRAGON_SILVER:
                      nTotem == FEAT_DRAGONSHAMAN_WHITE     ? PRC_WING_TYPE_DRAGON_WHITE:
                      nTotem == FEAT_DRAGONSHAMAN_RED       ? PRC_WING_TYPE_DRAGON_RED:
                      CREATURE_WING_TYPE_DRAGON;

        SetCompositeBonus(oSkin, "WingBonus", 10, ITEM_PROPERTY_SKILL_BONUS, SKILL_JUMP);
        SetCreatureWingType(nWingType, oPC);
        SetPersistantLocalInt(oPC, "DragShamanWingsApplied", TRUE);
    }
}