//::///////////////////////////////////////////////
//:: Frenzied Berserker - Armor/Skin
//:://////////////////////////////////////////////
/*
    Script to modify skin of Frenzied Berserker
*/
//:://////////////////////////////////////////////
//:: Created By: Oni5115
//:: Created On: Feb 26, 2004
//:://////////////////////////////////////////////
#include "prc_alterations" // for checking if item is a weapon

void CheckSupremePowerAttack(object oPC, int iEquip)
{
      int bIsWeapon = FALSE;
      
      if(iEquip == 2)       // On Equip
      {
          object oWeapon = GetItemLastEquipped();
          if(IPGetIsMeleeWeapon(oWeapon) || GetWeaponRanged(oWeapon) )
          {
               bIsWeapon = TRUE;
          } 
      }
      else if(iEquip == 1)  // Unequip
      {
          object oWeapon = GetItemLastUnequipped();
          if(IPGetIsMeleeWeapon(oWeapon) || GetWeaponRanged(oWeapon) )
          {
               bIsWeapon = TRUE;
          } 
      }      
      
      if(GetHasFeatEffect(FEAT_SUPREME_POWER_ATTACK) && bIsWeapon)
      {    
          // Removes effects
          PRCRemoveSpellEffects(SPELL_SUPREME_POWER_ATTACK, oPC, oPC);

          string nMes = "*Supreme Power Attack Mode Deactivated*";
          FloatingTextStringOnCreature(nMes, OBJECT_SELF, FALSE);
      }
}

void ApplyAutoFrenzy(object oPC, object oArmor)
{
     IPSafeAddItemProperty(oArmor, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
     SetLocalInt(oPC, "AFrenzy", 2);
}

void RemoveAutoFrenzy(object oPC, object oArmor)
{
     RemoveSpecificProperty(oArmor, ITEM_PROPERTY_ONHITCASTSPELL, IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 0, 1, "", -1, DURATION_TYPE_TEMPORARY);
     SetLocalInt(oPC, "AFrenzy", 1);
}

void main()
{
    //Declare main variables.
    object oPC = OBJECT_SELF;
    object oItem;
    int iEquip = GetLocalInt(oPC, "ONEQUIP");
    
    if(GetHasFeat(FEAT_FRENZY) && GetLocalInt(oPC, "AFrenzy") == 0)
    {
        // remove bonus on error
        object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
        RemoveAutoFrenzy(oPC, oArmor);
        ApplyAutoFrenzy(oPC, oArmor);
    }    
    else if(GetHasFeat(FEAT_FRENZY) && GetLocalInt(oPC, "AFrenzy") != 0)
    {              
        if(iEquip == 2)       // On Equip
        {
             // add bonus to armor
             object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
             oItem = GetItemLastEquipped();
             
             if(oItem == oArmor)
             {
                  ApplyAutoFrenzy(oPC, oArmor); 
             }
        }
        else if(iEquip == 1)  // Unequip
        {
             oItem = GetItemLastUnequipped();
             
             if(GetBaseItemType(oItem) == BASE_ITEM_ARMOR)
             {
                  RemoveAutoFrenzy(oPC, oItem);
             }
        }
        else                  // On level, rest, or other events
        {
             object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
             RemoveAutoFrenzy(oPC, oArmor);
             ApplyAutoFrenzy(oPC, oArmor);
        }
    }
    
    CheckSupremePowerAttack(oPC, iEquip);
}