//::///////////////////////////////////////////////
//:: Example XP2 OnItemEquipped
//:: x2_mod_def_equ
//:: (c) 2003 Bioware Corp.
//:://////////////////////////////////////////////
/*
    Put into: OnEquip Event
*/
//:://////////////////////////////////////////////
//:: Created By: Georg Zoeller
//:: Created On: 2003-07-16
//:://////////////////////////////////////////////

#include "prc_inc_function"
#include "prc_inc_wpnrest"
#include "inc_timestop"
#include "prc_inc_itmrstr"
#include "prc_inc_template"

//Added hook into EvalPRCFeats event
//  Aaon Graywolf - 6 Jan 2004
//Added delay to EvalPRCFeats event to allow module setup to take priority
//  Aaon Graywolf - Jan 6, 2004
//Removed the delay. It was messing up evaluation scripts that use GetItemLastEquipped(By)
//  Ornedan - 07.03.2005

void main()
{
    object oItem = GetItemLastEquipped();
    object oPC   = GetItemLastEquippedBy();

    if(!GetIsObjectValid(oPC))
        return;

    //if(DEBUG) DoDebug("Running OnEquip, creature = '" + GetName(oPC) + "' is PC: " + DebugBool2String(GetIsPC(oPC)) + "; Item = '" + GetName(oItem) + "' - '" + GetTag(oItem) + "'");

    SetLocalInt(oPC, "ONEQUIP", 2); // Ugly hack to work around event detection in CheckPRCLimitations() - Ornedan

    // Handle custom limitation itemproperties and other itemproperties that trigger when equipped, like PnP Holy Avenger and speed modifications
    if(!CheckPRCLimitations(oItem, oPC))
    {
        // "You cannot equip " + GetName(oItem)
        SendMessageToPC(oPC, ReplaceChars(GetStringByStrRef(16828407), "<itemname>", GetName(oItem)));
        int i;
        object oTest;
        for(i = 0; i < NUM_INVENTORY_SLOTS; i++)
        {
            oTest = GetItemInSlot(i, oPC);
            if(oTest == oItem)
            {
                DelayCommand(0.3f, ForceUnequip(oPC, oItem, i));
                return;
            }
        }
    }

    EvalPRCFeats(oPC);
    DeleteLocalInt(oPC, "ONEQUIP");

    //Handle lack of fingers/hands
    if(GetPersistantLocalInt(oPC, "LEFT_HAND_USELESS"))
    {
        //Force unequip
        ForceUnequip(oPC, GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC), INVENTORY_SLOT_LEFTHAND);
        SendMessageToPC(oPC, "You cannot use your left hand");
    }

    if(GetPersistantLocalInt(oPC, "RIGHT_HAND_USELESS"))
    {
        //Force unequip
        ForceUnequip(oPC, GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC), INVENTORY_SLOT_RIGHTHAND);
        SendMessageToPC(oPC, "You cannot use your right hand");
    }
    if (GetHasSpellEffect(SPELL_LUMINOUS_ARMOR, oPC) || GetHasSpellEffect(SPELL_GREATER_LUMINOUS_ARMOR, oPC))
    {
        object oArmour = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
        if (GetBaseAC(oArmour) > 0)
        {
            ForceUnequip(oPC, oArmour, INVENTORY_SLOT_CHEST);
            SendMessageToPC(oPC, "You cannot wear armor while under the effects of Luminous Armour");          
        }   
    }

    DelayCommand(0.2, DoWeaponsEquip(oPC));        

    //timestop noncombat equip
    DoTimestopEquip(oPC, oItem);
	
//:: Clear Echoblade effect if weapon is changed
	int nBaseItem = GetBaseItemType(oItem);
	
	effect eEffect = GetFirstEffect(oPC);
	
	if (nBaseItem == BASE_ITEM_AMULET || nBaseItem == BASE_ITEM_ARMOR ||  nBaseItem == BASE_ITEM_ARROW ||  nBaseItem == BASE_ITEM_BELT ||  nBaseItem == BASE_ITEM_BOLT ||  nBaseItem == BASE_ITEM_BOOTS 
	||  nBaseItem == BASE_ITEM_BRACER ||  nBaseItem == BASE_ITEM_BULLET ||  nBaseItem == BASE_ITEM_CBLUDGWEAPON ||  nBaseItem == BASE_ITEM_CLOAK ||  nBaseItem == BASE_ITEM_CPIERCWEAPON 
	||  nBaseItem == BASE_ITEM_CREATUREITEM ||  nBaseItem == BASE_ITEM_CSLASHWEAPON ||  nBaseItem == BASE_ITEM_CSLSHPRCWEAP ||  nBaseItem == BASE_ITEM_GLOVES ||  nBaseItem == BASE_ITEM_HELMET 
	||  nBaseItem == BASE_ITEM_RING ||  nBaseItem == BASE_ITEM_LARGESHIELD ||  nBaseItem == BASE_ITEM_RING ||  nBaseItem == BASE_ITEM_SMALLSHIELD ||  nBaseItem == BASE_ITEM_TOWERSHIELD)  
	{
		return;
	}
	else
	{
		while(GetIsEffectValid(eEffect))
		{
			if(GetEffectTag(eEffect) == "Echoblade")
			RemoveEffect(oPC, eEffect);
			eEffect = GetNextEffect(oPC);
		}	
	}	
	
//:: Saint / Holy Touch doesn't work w/ ranged weapons
	if (GetHasTemplate(TEMPLATE_SAINT, oPC))
	{
	//:: Setup Holy Touch extra damage vs evil
		effect eEffect1 = VersusAlignmentEffect(EffectDamageIncrease(7, DAMAGE_TYPE_DIVINE), 0, ALIGNMENT_EVIL);
		effect eEffect2 = VersusAlignmentEffect(EffectDamageIncrease(DAMAGE_BONUS_2, DAMAGE_TYPE_DIVINE), 0, ALIGNMENT_EVIL);
		       eEffect2 = VersusRacialTypeEffect(eEffect2, RACIAL_TYPE_OUTSIDER);
		effect eEffect3 = VersusAlignmentEffect(EffectDamageIncrease(DAMAGE_BONUS_2, DAMAGE_TYPE_DIVINE), 0, ALIGNMENT_EVIL);
		       eEffect3 = VersusRacialTypeEffect(eEffect3, RACIAL_TYPE_UNDEAD);
		effect eLink = EffectLinkEffects(eEffect1, eEffect2);
		       eLink = EffectLinkEffects(eLink, eEffect3);
		       eLink = SupernaturalEffect(eLink);
		       eLink = TagEffect(eLink, "EffectHolyTouch");

	//:: Clear the effect to be safe and prevent stacking
		effect eCheckEffect = GetFirstEffect(oPC);
            
		while (GetIsEffectValid(eCheckEffect))
		{
			if (GetEffectTag(eCheckEffect) == "EffectHolyTouch")
			{
				RemoveEffect(oPC, eCheckEffect);
			
			}
			
		eCheckEffect = GetNextEffect(oPC);
		
		}

//:: check if equipped with a ranged weapon and apply effect again if not
        if (!GetWeaponRanged(oItem))
			ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oPC);
	}

    // Execute scripts hooked to this event for the creature and item triggering it
    ExecuteAllScriptsHookedToEvent(oPC, EVENT_ONPLAYEREQUIPITEM);
    ExecuteAllScriptsHookedToEvent(oItem, EVENT_ITEM_ONPLAYEREQUIPITEM);

    // Tag-based scripting hook for PRC items
    SetUserDefinedItemEventNumber(X2_ITEM_EVENT_EQUIP);
    ExecuteScript("is_"+GetTag(oItem), OBJECT_SELF);
}