//::///////////////////////////////////////////////
//:: Scarface's Crafting System V1.0
//:: sfcs_functs_rem
//::
//:://////////////////////////////////////////////
/*
    All of the  functions to remove item properties -
    DO NOT TOUCH!!!
*/
//////////////////////////////////////////////////

#include "sfcs_functs"
#include "x2_inc_itemprop"

//:: Declair Functions
void RemoveACBonus(object oItem);
void RemoveAcidBonus(object oItem);
void RemoveAttackBonus(object oItem);
void RemoveBludgeonBonus(object oItem);
void RemoveCharismaBonus(object oItem);
void RemoveColdBonus(object oItem);
void RemoveConBonus(object oItem);
void RemoveDexBonus(object oItem);
void RemoveDivineBonus(object oItem);
void RemoveEnhancementBonus(object oItem);
void RemoveFireBonus(object oItem);
void RemoveHasteBonus(object oItem);
void RemoveHolyAvengerBonus(object oItem);
void RemoveKeenBonus(object oItem);
void RemoveMagicBonus(object oItem);
void RemoveNegativeBonus(object oItem);
void RemovePiercingBonus(object oItem);
void RemoveRegenBonus(object oItem);
void RemoveSlashingBonus(object oItem);
void RemoveSonicBonus(object oItem);
void RemoveStrengthBonus(object oItem);
void RemoveTrueSeeingBonus(object oItem);
void RemoveWisdomBonus(object oItem);

//:: Functions

void RemoveACBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("AC +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove AC bonus
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_AC_BONUS,
                                           DURATION_TYPE_PERMANENT);
            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take AC bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyACBonus(iProp), 0.0,
                                  X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "AC +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
    }
}
void RemoveAcidBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Acid +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove acid damage - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_DAMAGE_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_DAMAGETYPE_ACID);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take acid bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID,
                                  DamageBonus(iProp)), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Acid +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
    }
}
void RemoveAttackBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Attack +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Check if there are no more Attack Bonuses on the item
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_ATTACK_BONUS,
                                           DURATION_TYPE_PERMANENT);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Attack Bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyAttackBonus(iProp), 0.0,
                                 X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Attack +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
    }
}
void RemoveBludgeonBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Bludgeoning +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove bludge damage - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_DAMAGE_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_DAMAGETYPE_BLUDGEONING);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Attack Bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_BLUDGEONING,
                                   DamageBonus(iProp)), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Bludgeoning +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
    }
}
void RemoveCharismaBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Charisma +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove Charisma bonus - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_ABILITY_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_ABILITY_CHA);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Charisma bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyAbilityBonus(IP_CONST_ABILITY_CHA,
                                   iProp), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Charisma +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
   }
}
void RemoveColdBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Cold +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove cold damage - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_DAMAGE_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_DAMAGETYPE_COLD);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Attack Bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,
                                  DamageBonus(iProp)), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Cold +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
    }
}
void RemoveConstitutionBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Constitution +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove Constitution bonus - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_ABILITY_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_ABILITY_CON);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Constitution bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyAbilityBonus(IP_CONST_ABILITY_CON,
                                   iProp), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Constitution +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
    }
}
void RemoveDexterityBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Dexterity +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove dexterity bonus - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_ABILITY_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_ABILITY_DEX);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take strength bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyAbilityBonus(IP_CONST_ABILITY_DEX,
                                   iProp), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Dexterity +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
    }
}
void RemoveDivineBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Divine +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove divine damage - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_DAMAGE_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_DAMAGETYPE_DIVINE);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Attack Bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_DIVINE,
                                  DamageBonus(iProp)), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Divine +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
   }
}
void RemoveEnhancementBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Enhancement +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove emhancement damage - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_ENHANCEMENT_BONUS,
                                           DURATION_TYPE_PERMANENT);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Attack Bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyEnhancementBonus(iProp), 0.0,
                                  X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Enhancement +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
    }
}
void RemoveFireBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Fire +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove fire damage - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_DAMAGE_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_DAMAGETYPE_FIRE);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Attack Bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,
                                   DamageBonus(iProp)), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Fire +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
    }
}
void RemoveHasteBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Haste");

    if (sProp != "INVALID")
    {
        // Remove haste
        IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_HASTE, DURATION_TYPE_PERMANENT);

        // Delete local var
        DeleteLocalString(OBJECT_SELF, sProp);
    }
}
void RemoveHolyAvengerBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Holy Avenger");

    if (sProp != "INVALID")
    {
        // Remove haste
        IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_HOLY_AVENGER, DURATION_TYPE_PERMANENT);

        // Delete local var
        DeleteLocalString(OBJECT_SELF, sProp);
    }
}
void RemoveIntellegenceBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Intellegence +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove Intellegence bonus - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_ABILITY_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_ABILITY_INT);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Intellegence bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyAbilityBonus(IP_CONST_ABILITY_INT,
                                   iProp), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Intellegence +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
   }
}
void RemoveKeenBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Keen");

    if (sProp != "INVALID")
    {
        // Remove keen
        IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_KEEN, DURATION_TYPE_PERMANENT);

        // Delete local var
        DeleteLocalString(OBJECT_SELF, sProp);
    }
}
void RemoveMagicBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Magical +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove magical damage - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_DAMAGE_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_DAMAGETYPE_MAGICAL);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Attack Bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL,
                                   DamageBonus(iProp)), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Magical +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
    }
}
void RemoveNegativeBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Negative +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove negative damage - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_DAMAGE_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_DAMAGETYPE_NEGATIVE);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Attack Bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_NEGATIVE,
                                   DamageBonus(iProp)), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Negative +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
   }
}
void RemovePiercingBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Piercing +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove piercing damage - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_DAMAGE_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_DAMAGETYPE_PIERCING);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Attack Bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_PIERCING,
                                   DamageBonus(iProp)), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Piercing +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
    }
}
void RemoveRegenBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Regeneration +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove Regeneration bonus - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_REGENERATION,
                                           DURATION_TYPE_PERMANENT);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Regeneration bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyRegeneration(iProp), 0.0,
                                  X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Regeneration +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
   }
}
void RemoveSlashingBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Slashing +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove slashing damage - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_DAMAGE_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_DAMAGETYPE_SLASHING);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Attack Bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SLASHING,
                                   DamageBonus(iProp)), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Slashing +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
   }
}
void RemoveSonicBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Sonic +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove sonic damage - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_DAMAGE_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_DAMAGETYPE_SONIC);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Attack Bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SONIC,
                                   DamageBonus(iProp)), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Sonic +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
   }
}
void RemoveStrengthBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Strength +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove strength bonus - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_ABILITY_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_ABILITY_STR);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take strength bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR,
                                   iProp), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Strength +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
    }
}
void RemoveTrueSeeingBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("True Seeing");

    if (sProp != "INVALID")
    {
        // Remove True Seeing
        IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_TRUE_SEEING, DURATION_TYPE_PERMANENT);

        // Delete local var
        DeleteLocalString(OBJECT_SELF, sProp);
    }
}
void  RemoveWisdomBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Wisdom +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove Wisdom bonus - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_ABILITY_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_ABILITY_WIS);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Wisdom bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyAbilityBonus(IP_CONST_ABILITY_WIS,
                                   iProp), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Wisdom +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
   }
}
void RemoveIntelligenceBonus(object oItem)
{
    // Get the correct property slot
    string sProp = GetItemPropertySlot("Intelligence +");

    if (sProp != "INVALID")
    {
        // Get the property amount
        int iProp = GetLocalInt(OBJECT_SELF, sProp);
        iProp--;

        // Remove Intelligence bonus - 1
        if (iProp <= 0)
        {
            IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_ABILITY_BONUS,
                                           DURATION_TYPE_PERMANENT, IP_CONST_ABILITY_INT);

            // Set local vars
            DeleteLocalString(OBJECT_SELF, sProp);
            DeleteLocalInt(OBJECT_SELF, sProp);
        }
        else
        {
            // Take Intelligence bonus -1
            IPSafeAddItemProperty(oItem, ItemPropertyAbilityBonus(IP_CONST_ABILITY_INT,
                                   iProp), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);

            // Set local vars
            SetLocalString(OBJECT_SELF, sProp, "Intelligence +" + IntToString(iProp));
            SetLocalInt(OBJECT_SELF, sProp, iProp);
        }
   }
}