#include "prc_alterations"

void RemoveAllIP(object oItem)
{
   itemproperty ip = GetFirstItemProperty(oItem);
    int total = 0;

    while(GetIsItemPropertyValid(ip))
    {
       RemoveItemProperty(oItem, ip);
       ip = GetNextItemProperty(oItem);
    }

}

void main()
{

   if (GetMaxHenchmen() < 4)
   {
      SetMaxHenchmen(4);
   }
   
   if (!GetHasFeat(FEAT_ENERGON_COMPANION))
   {

     int nLoop, nCount;
     object oHench;
     for (nLoop=1; nLoop<=GetMaxHenchmen(); nLoop++)
     {
        oHench = GetHenchman(OBJECT_SELF, nLoop);

        if (GetResRef(oHench)=="xagya2")
        {
           RemoveHenchman(OBJECT_SELF,oHench);
           AssignCommand(oHench, SetIsDestroyable(TRUE));
           DestroyObject(oHench);
        }
     }
      return;
   }


   int nLoop, nCount;
   object oHench;
   for (nLoop=1; nLoop<=GetMaxHenchmen(); nLoop++)
   {
    oHench = GetHenchman(OBJECT_SELF, nLoop);

      if (GetIsObjectValid(oHench))  nCount++;

     if (GetResRef(oHench)=="xagya2")
     {
        RemoveHenchman(OBJECT_SELF,oHench);
        AssignCommand(oHench, SetIsDestroyable(TRUE));
        DestroyObject(oHench);
        nCount--;
     }
   }

    if (nCount >= GetMaxHenchmen()) return;


    oHench = CreateObject(OBJECT_TYPE_CREATURE,"xagya2", GetSpellTargetLocation());
    AddHenchman(OBJECT_SELF,oHench);


    object  oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST,oHench);
    object  oAmulet = GetItemInSlot(INVENTORY_SLOT_NECK,oHench);
    object  oRing1 = GetItemInSlot(INVENTORY_SLOT_LEFTRING,oHench);
    object  oRing2 = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,oHench);
    object  oBelt = GetItemInSlot(INVENTORY_SLOT_BELT,oHench);
    object  oCloak = GetItemInSlot(INVENTORY_SLOT_CLOAK,oHench);
    object  oGauntlet = GetItemInSlot(INVENTORY_SLOT_ARMS,oHench);
    object  oBoot = GetItemInSlot(INVENTORY_SLOT_BOOTS,oHench);

    int iLvl = GetHitDice(OBJECT_SELF);

    int iBonus = (iLvl/5)+1;

    RemoveAllIP(oArmor);
    SetItemCursedFlag(oArmor,TRUE);
    AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyACBonus(iBonus),oArmor);
    RemoveAllIP(oAmulet);
    SetItemCursedFlag(oAmulet,TRUE);
    AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyAbilityBonus(IP_CONST_ABILITY_WIS,iBonus),oAmulet);
    RemoveAllIP(oRing1);
    SetItemCursedFlag(oRing1,TRUE);
    AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyACBonus(iBonus),oRing1);
    RemoveAllIP(oRing2);
    SetItemCursedFlag(oRing2,TRUE);
    AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE,iBonus),oRing2);
    RemoveAllIP(oBelt);
    SetItemCursedFlag(oBelt,TRUE);
    AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR,iBonus),oBelt);
    RemoveAllIP(oCloak);
    SetItemCursedFlag(oCloak,TRUE);
    AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyAbilityBonus(IP_CONST_ABILITY_CHA,iBonus),oCloak);
    RemoveAllIP(oGauntlet);
    SetItemCursedFlag(oGauntlet,TRUE);
    AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyAbilityBonus(IP_CONST_ABILITY_DEX,iBonus),oGauntlet);
    RemoveAllIP(oBoot);
    SetItemCursedFlag(oBoot,TRUE);
    AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyAbilityBonus(IP_CONST_ABILITY_CON,iBonus),oBoot);

   AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyDamageReduction(iBonus-1,(iLvl/10)),oArmor);


   int i;
   for (i = 0; i < 4; i++)
      LevelUpHenchman( oHench,CLASS_TYPE_OUTSIDER,TRUE,PACKAGE_INVALID);

   int  iFeat = GetHasFeat(FEAT_POSITIVE_ENERGY_BURST);

   if ( GetHitDice(OBJECT_SELF) >7)
   {
      int level = (GetHitDice(OBJECT_SELF)-7+iFeat*2)/2;

     for (i = 0; i < level ; i++)
      LevelUpHenchman( oHench,CLASS_TYPE_CLERIC,TRUE,PACKAGE_CLERIC_DIVINE);

     if ( (GetHitDice(OBJECT_SELF)-7+iFeat*2)!= level*2) level++;

     for (i = 0; i < level ; i++)
      LevelUpHenchman( oHench,CLASS_TYPE_OUTSIDER,TRUE,PACKAGE_INVALID);

   }


    object oCreL=GetItemInSlot(INVENTORY_SLOT_CWEAPON_L,oHench);
    object oCreR=GetItemInSlot(INVENTORY_SLOT_CWEAPON_R,oHench);

    AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_POSITIVE,IP_CONST_DAMAGEBONUS_1d6),oCreL);
    AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_POSITIVE,IP_CONST_DAMAGEBONUS_1d6),oCreR);


//    effect eConceal = SupernaturalEffect(EffectConcealment(50));
//    DelayCommand(0.1f, ApplyEffectToObject(DURATION_TYPE_INSTANT, eConceal, oHench));



}